【入門編】【パス解析アルゴリズム】InStrRev・Split 関数を用いた FileSystemObject に依存しない高速なファイルパス・拡張子分解 – VBScript (Visual Basic Scripting Edition)解析バイブル

スポンサーリンク

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は古い言語と言われますが、その軽快さは現代のプログラミングにも通じる「効率の美学」が詰まっています。ここをクリアすれば、君はもう初心者ではありません。

何か分からないことがあれば、いつでも聞いてください。さあ、次はどんな自動化に挑戦しますか?

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