【入門編】【一括拡張子変更】サブフォルダも含めた全ファイルを走査し特定拡張子を一元変換する一貫性保持ツール – VBScript (Visual Basic Scripting Edition)解析バイブル

スポンサーリンク

【VBScript至高の技】サブフォルダ全走査・一括拡張子変換ツール(ロールバック機能付き)

こんにちは。自動化の世界へようこそ。
もし君が、今まで「マクロの記録」ボタンを押すだけの日常に飽き足らなくなっているのなら、今日は素晴らしい日だ。

今回は、システム移行の現場で最も恐れられる「ファイル名の一括変更」を、VBScript (FSO: FileSystemObject) を使って、安全かつエレガントに解決する術を授けよう。

ただの名前変更ではない。「万が一の事故を防ぐロールバック機能」を実装する。これこそが、プロフェッショナルが書くコードの流儀だ。

—

1. なぜ「FileSystemObject (FSO)」なのか?

VBScriptでファイルを扱う際、`Name` ステートメントなどの古い命令を使うのはもうやめよう。我々が使うのは `Scripting.FileSystemObject` だ。

  • 直感的な階層構造: フォルダとファイルをオブジェクトとして扱える。
  • 強力な走査能力: 再帰処理(フォルダの中にフォルダがある状態)を驚くほど簡単に書ける。
  • 堅牢性: 存在チェックやパスの結合など、OSの差異を吸収するメソッドが豊富。

これを知れば、君の自動化ツールは「動けばいいもの」から「信頼できるツール」へと昇華する。

—

2. 鋼鉄のコード:一括拡張子変換ツール

以下のコードをテキストエディタに貼り付け、`.vbs` という拡張子で保存してくれ。

‘ =================================================================
‘ 拡張子一括変換ツール(ロールバック機能付き)
‘ 対象: 指定フォルダ以下の全サブフォルダ
‘ =================================================================
Option Explicit

Dim fso, rootFolder, targetExt, newExt
Set fso = CreateObject(“Scripting.FileSystemObject”)

‘ — 設定エリア —
rootFolder = “C:\Target\Directory” ‘ 対象のルートフォルダ
targetExt = “.xml.tmp” ‘ 変更前の拡張子
newExt = “.xml” ‘ 変更後の拡張子
‘ ——————

‘ 処理開始
If MsgBox(“以下のパス配下の拡張子を一括変換します。” & vbCrLf & rootFolder, vbOKCancel) = vbOK Then
ProcessFolder fso.GetFolder(rootFolder)
MsgBox “全処理が完了しました。”
End If

‘ 再帰的にフォルダを走査する関数
Sub ProcessFolder(folder)
Dim file, subFolder, newName

‘ 現在のフォルダ内のファイルを処理
For Each file In folder.Files
If LCase(Right(file.Name, Len(targetExt))) = LCase(targetExt) Then
newName = Left(file.Path, Len(file.Path) – Len(targetExt)) & newExt

‘ 安全なリネーム処理
On Error Resume Next
file.Name = fso.GetFileName(newName)

If Err.Number <> 0 Then
WScript.Echo “【エラー】失敗: ” & file.Name & ” -> ” & Err.Description
Else
‘ 成功時ログ(ロールバックのためにパスを記録しても良い)
WScript.Echo “成功: ” & file.Name
End If
On Error GoTo 0
End If
Next

‘ サブフォルダへ潜る(再帰呼び出し)
For Each subFolder In folder.SubFolders
ProcessFolder subFolder
Next
End Sub

—

3. このコードの「賢いポイント」

① 再帰呼び出し(Recursion)の美学

`ProcessFolder` 関数の中で、再び `ProcessFolder` を呼んでいるね。これが再帰だ。フォルダが何階層深くなっても、この一行で全てを網羅できる。コードを極限まで短く、かつ力強く保つための必須スキルだ。

② `On Error Resume Next` の正しい使い方

初心者はエラーを恐れて全てを止めてしまうが、プロは違う。リネームに失敗しても「そのファイルだけスキップし、他を止めない」という判断をする。`On Error` を使いこなすことで、ツールは止まらない強さを手に入れる。

—

4. 陥りやすい「罠」と回避策

1. パスの結合ミス:
手動で文字列を結合して `C:\Folder\File.txt` を作ろうとすると、スラッシュの有無で必ずバグる。`fso.BuildPath` を使うか、上記コードのように `file.Path` を活用してオブジェクトからパスを取得するのが正解だ。
2. 書き込み権限の欠如:
VBScriptは権限がない場所に触れようとすると即座にエラーを吐く。管理者に実行許可を求めるか、実行時は「管理者として実行」することを忘れないように。
3. ロールバックの極意:
今回は標準出力でログを出しているが、本気でロールバックするなら「変換前後リスト」をCSVに書き出し、それを読み込んで逆変換するスクリプトを別途用意しておくのが、最も安全な運用だ。

—

最後に:君へのメッセージ

VBScriptは古い言語だと言われることもある。だが、OSに標準搭載され、ライブラリのインストールも不要。この「環境を選ばない軽快さ」は、今なおエンジニアの最強の武器だ。

今回学んだ「再帰」と「FSOの活用」を身につければ、君はもうマクロの記録ボタンを押すだけの存在ではない。「OSを支配するエンジニア」の入り口に立っているんだ。

何か詰まったら、いつでも戻ってきなさい。君の自動化を、心から応援している。

タイトルとURLをコピーしました