【入門編】【ドラッグ&ドロップ応用】WScript.Arguments を用いた複数ファイル・フォルダ同時ドロップの解析と自動振り分け – VBScript (Visual Basic Scripting Edition)解析バイブル

スポンサーリンク

こんにちは。現場で泥臭く、しかし誰よりもエレガントに自動化を追求しているエンジニアです。

今回は、VBScriptの真骨頂とも言える「ドラッグ&ドロップ(D&D)による自動振り分け処理」について紐解いていきます。

「マクロの記録」から一歩踏み出し、WindowsのOSレベルでスクリプトを操る。この快感を知れば、退屈な手作業の時間は劇的に短縮されます。さあ、VBScriptの核心に触れていきましょう。

なぜ「ドラッグ&ドロップ」なのか?

コマンドプロンプトで引数を入力する時代はもう終わりです。「ファイルを掴んでアイコンに落とす」。この直感的な操作こそ、Windowsにおける最強のインターフェースです。

VBScriptでこれを利用するには、`WScript.Arguments` という魔法のオブジェクトを使います。これは、スクリプトに「投げ込まれたファイル」を配列として保持する特別な受け皿です。

汎用ドロップハンドラーの全貌

まずは、ドロップされたファイルが「ファイルなのかフォルダなのか」、そして「拡張子は何なのか」を判定して処理を振り分ける、現場でそのまま使えるテンプレートを提示します。

‘ — 汎用ドロップハンドラー・テンプレート —
Option Explicit

Dim objFSO, objArgs, i, strPath, strExt

‘ ファイルシステム操作用のオブジェクトを作成
Set objFSO = CreateObject(“Scripting.FileSystemObject”)
‘ ドロップされた引数を取得
Set objArgs = WScript.Arguments

‘ 投げ込まれたものが一つもなければ終了
If objArgs.Count = 0 Then
WScript.Echo “ファイルをドロップしてください。”
WScript.Quit
End If

‘ 複数ファイル対応:投げ込まれた分だけループする
For i = 0 To objArgs.Count – 1
strPath = objArgs(i)

‘ フォルダかファイルかを判定
If objFSO.FolderExists(strPath) Then
‘ フォルダがドロップされた時の処理
Call ProcessFolder(strPath)
ElseIf objFSO.FileExists(strPath) Then
‘ ファイルの拡張子を取得(小文字に統一して判定)
strExt = LCase(objFSO.GetExtensionName(strPath))

Select Case strExt
Case “xlsx”, “xls”
Call ProcessExcel(strPath)
Case “txt”, “csv”
Call ProcessText(strPath)
Case Else
WScript.Echo “未対応の形式です: ” & strExt
End Select
End If
Next

‘ — 以下、各処理の関数 —
Sub ProcessFolder(path)
WScript.Echo “フォルダを処理中: ” & path
End Sub

Sub ProcessExcel(path)
WScript.Echo “Excelファイルを処理中: ” & path
End Sub

Sub ProcessText(path)
WScript.Echo “テキストファイルを処理中: ” & path
End Sub

コードを読み解く:3つの重要ポイント

1. `Option Explicit` の規律

初心者が最初に陥る罠は「変数のスペルミス」です。これを防ぐために、冒頭の `Option Explicit` は必須です。これを書くことで、宣言していない変数を使った瞬間にエラーを出してくれます。プロのエンジニアは、たとえ数行のコードでも必ず書きます。

2. `WScript.Arguments` の正体

これは配列のようなものですが、少し特殊です。`objArgs.Count` で投げ込まれた個数を取得し、`objArgs(i)` で順に取り出します。ここをループ(For文)で回すだけで、1個のファイルでも100個のファイルでも同じロジックで処理できる「スケーラビリティ」が生まれます。

3. `Scripting.FileSystemObject (FSO)` の重要性

Windowsでファイル操作をするなら、このFSOオブジェクトを使いこなすのが近道です。ファイルの存在確認、拡張子の取得、パスの分割……。これらを手書きで実装してはいけません。OSが提供するAPIを信頼して使い倒しましょう。

初心者が陥りやすい「落とし穴」

  • パスに空白が含まれる場合:

大丈夫です。`WScript.Arguments` は、パスに空白が含まれていても、正しく一つの引数として認識してくれます。自分でパスを加工しようとせず、オブジェクトに任せるのが鉄則です。

  • 文字コードの壁:

VBScriptはデフォルトでShift-JISを想定することが多いです。日本語ファイル名が含まれる場合、環境によっては文字化けすることがあります。その際は、処理の途中で文字コード変換を行うか、ファイルパスを直接触らずに `FSO` のメソッドを通すように徹底してください。

最後に:ここをクリアすれば「自動化の達人」です

このスクリプトを `.vbs` という拡張子で保存し、デスクトップにショートカットを作ってみてください。そこにファイルを投げ込むだけで、あなたのPCは「あなた専用の秘書」に変わります。

最初は「動くだけ」で十分です。そこから「この拡張子なら自動でフォルダ分けしたい」「ログを出力したい」と欲望を膨らませていってください。VBScriptは非常にシンプルで、あなたのアイディアを最短距離で形にするための強力な武器です。

また分からないことがあれば、いつでも聞きに来てください。一緒に最高の自動化環境を作り上げていきましょう!

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