VBScriptを極める:FileSystemObjectに頼らない「爆速」パス解析術
こんにちは。現場の最前線で自動化を支え続けているエンジニアです。
VBScriptでファイル操作をする際、教科書通りに`Scripting.FileSystemObject`(FSO)をインスタンス化していませんか? それ、実は「大量のファイルを処理する場面」では命取りになるかもしれません。
今回は、FSOのオーバーヘッドを一切排除し、VBScriptの標準文字列関数だけを用いて、瞬時にパスを分解する「職人技」を伝授します。これを知れば、君のスクリプトは一段上の次元に到達します。
—
1. なぜ「FSO」を使わないのか?
`FileSystemObject`は確かに便利です。`GetParentFolderName`や`GetExtensionName`といったメソッドは直感的ですよね。しかし、これらは「重い」のです。
- インスタンス化のコスト: ループの中で毎回FSOを生成するのはメモリと時間の浪費です。
- ファイルシステムへの依存: FSOはファイルシステムへのアクセスを伴うため、ネットワークパスやパス文字列が長い場合、予期せぬタイムラグが発生します。
対して、これから紹介する文字列関数(InStrRev, Left, Mid)は、単なるメモリ上の操作です。純粋な計算処理であるため、速度は桁違いです。
—
2. 核心:パス解析のアルゴリズム
パスの解析において、重要なのは「後ろから探す」という発想です。
- `InStrRev(文字列, 検索文字)`:文字列の最後から特定の文字を探す。
- `Mid(文字列, 開始位置)`:指定した位置から文字列を切り出す。
これらを組み合わせれば、パスの構造を論理的に切り分けられます。
実践コード:パス分解ライブラリ
以下のコードをコピーして、自分のスクリプトに組み込んでみてください。
‘ パス文字列から情報を抽出する高速関数群
Option Explicit
Dim fullPath
fullPath = “C:\Projects\Automation\Reports\Weekly_Report.xlsx”
‘ 分解結果の表示
WScript.Echo “元パス: ” & fullPath
WScript.Echo “フォルダ: ” & GetDir(fullPath)
WScript.Echo “ファイル名: ” & GetFileName(fullPath)
WScript.Echo “拡張子: ” & GetExt(fullPath)
‘ フォルダパスを抽出
Function GetDir(strPath)
Dim pos
pos = InStrRev(strPath, “\”)
If pos > 0 Then
GetDir = Left(strPath, pos – 1)
Else
GetDir = “”
End If
End Function
‘ ファイル名を抽出
Function GetFileName(strPath)
Dim pos
pos = InStrRev(strPath, “\”)
GetFileName = Mid(strPath, pos + 1)
End Function
‘ 拡張子を抽出
Function GetExt(strPath)
Dim dotPos, slashPos
dotPos = InStrRev(strPath, “.”)
slashPos = InStrRev(strPath, “\”)
‘ ドットがパスの区切りより後ろにある場合のみ拡張子とみなす
If dotPos > slashPos Then
GetExt = Mid(strPath, dotPos + 1)
Else
GetExt = “”
End If
End Function
—
3. コードのポイントと注意点
なぜ `InStrRev` なのか?
ファイルパスは `C:\User\Documents\Project\data.csv` のように、区切り文字 `\` が複数含まれます。最初から探すと「一番最初の区切り」で止まってしまいますが、`InStrRev` を使えば「一番最後の区切り(つまりファイル名の直前)」をピンポイントで射抜くことができます。
陥りやすい罠:拡張子の判定
`GetExt` 関数で重要なのは、「ドットの位置が、区切り文字(\)の位置より後ろにあるか」という条件分岐です。
例えば `C:\Folder.Name\data` というパスの場合、`Folder.Name` にもドットが含まれます。単純にドットを探すだけでは誤判定するため、必ず `slashPos` との比較を行ってください。これができると「プロのコード」です。
—
4. ステップアップを目指す君へ
この手法を習得すれば、WSH環境下での大量ログ解析や、ファイルリネームツール作成において、処理速度で頭を悩ませることはなくなるでしょう。
- 初学者の壁: 「FSOを使わないとエラーが出そう」という恐怖心。
- 脱却の鍵: 「パスも単なる文字の羅列である」と割り切る論理思考。
VBScriptは古い言語と言われますが、その軽快さは現代のプログラミングにも通じる「効率の美学」が詰まっています。ここをクリアすれば、君はもう初心者ではありません。
何か分からないことがあれば、いつでも聞いてください。さあ、次はどんな自動化に挑戦しますか?
