Home » WSH・Windows Script Hostの使い方 » ファイル名をまとめて変更するVBScript-文字列の一括付与

ファイル名をまとめて変更するVBScript-文字列の一括付与

対象:VBScript

実務ではファイル名をまとめて変更したい、一括変更したいということがあります。

私の場合、画像ファイルを作成するときに「-a.png」「-b.png」といったファイル名でとりあえず保存しておいて、あとから「excel-vba-sample」といった文字列をまとめて付与する、という一括変更をよく行っています。

[スポンサードリンク]

ファイル名をまとめて変更するサンプルスクリプト

そのときに使っているVBScriptをご紹介します。

Option Explicit

Dim fso 'Scripting.FileSystemObject
Dim f 'Scripting.File
Dim args
Dim f_name
Dim add_txt

With WScript
  Set args = .Arguments
  If args.Count < 1 Then .Quit
  add_txt = InputBox("ファイル名に付加する文字列を入力してください。")
  If Len(add_txt) = 0 Then .Quit
End With

Set fso = CreateObject("Scripting.FileSystemObject")

On Error Resume Next

For Each f_name in args

  set f = fso.GetFile(f_name)
  f.Name = add_txt & f.Name

  With Err
  Select Case .Number
    Case 5, 52
      MsgBox "ファイル名に使えない文字が指定されたので中断します。"
      Exit For
    Case 58
      MsgBox add_txt & f.Name & " は既に存在するためファイル名を変更できません。"
      .Clear
    Case 0
      'エラーが発生しなかった場合は何もしない
    Case Else
      MsgBox .Description & .Number
      .Clear
  End Select
  End With

Next

Set f = Nothing
Set fso = Nothing

上記のコードを含んだ、拡張子「.vbs」のファイルを用意しておいて、ファイル名を変更したいファイルをその.vbsファイルにドラッグアンドドロップすると「ファイル名に付加する文字列を入力してください。」と表示されたインプットボックスが表示され、ファイル名を一括変更することができます。

スクリプトの解説

通常、.vbsファイルはダブルクリックでも実行できますが、このスクリプトの場合ダブルクリックで実行しても意味がないので、引数が1つもなかったときには終了しています。
 With WScript
  Set args = .Arguments
  If args.Count < 1 Then .Quit

インプットボックスを表示して、インプットボックスに何も入力されなかったときにも終了します。
 add_txt = InputBox("ファイル名に付加する文字列を入力してください。")
 If Len(add_txt) = 0 Then .Quit

ファイルが1つ以上指定され、何らかの文字列がインプットボックスに入力されたら、FileSystemObjectをCreateObjectして、
 Set fso = CreateObject("Scripting.FileSystemObject")

ドラッグアンドドロップされた全ファイルに対してループ処理を開始します。
 For Each f_name in args

ファイル名から、FileSystemObjectオブジェクトのGetFileメソッドでFileオブジェクトを取得して、
 set f = fso.GetFile(f_name)

ファイル名をまとめて変更するVBスクリプト

そのファイルの名前の前に、インプットボックスで入力された文字列を付与します。
 f.Name = add_txt & f.Name

ファイル名をまとめて変更するVBスクリプト

実行時エラーが発生する可能性があるため、Err.Numberに応じて処理を振り分けています。
 With Err
 Select Case .Number

「\」や「>」など、ファイル名に使うことのできない文字が入力されていたときには、メッセージを表示してループを抜けます。
  Case 5, 52
   MsgBox "ファイル名に使えない文字が指定されたので中断します。"
   Exit For

文字列を付与した結果、同じファイル名になってしまうようなケースについては、そのファイルはファイル名の変更を行わないで、ループ処理は継続します。
  Case 58
   MsgBox add_txt & f.Name & " は既に存在するためファイル名を変更できません。"
   .Clear

その他のエラーについてはErr.DescriptionとErr.Numberを表示しますが、エラーが発生しなかったときにもメッセージボックスが表示されてしまわないように、何も処理をしないCase 0を事前に入れています。
  Case 0
   'エラーが発生しなかった場合は何もしない
  Case Else
   MsgBox .Description & .Number
   .Clear

[スポンサードリンク]

Home » WSH・Windows Script Hostの使い方 » ファイル名をまとめて変更するVBScript-文字列の一括付与

「WSH・Windows Script Hostの使い方」の記事一覧

検索


Copyright © インストラクターのネタ帳 All Rights Reserved.

.