実務ではファイル名をまとめて変更したい、一括変更したいということがあります。
私の場合、画像ファイルを作成するときに「-a.png」「-b.png」といったファイル名でとりあえず保存しておいて、あとから「excel-vba-sample」といった文字列をまとめて付与する、という一括変更をよく行っています。
ファイル名をまとめて変更するサンプルスクリプト
そのときに使っているVBScriptをご紹介します。
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 = NothingSet 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)
そのファイルの名前の前に、インプットボックスで入力された文字列を付与します。
f.Name = add_txt & f.Name
実行時エラーが発生する可能性があるため、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-文字列の一括付与