【実務・中級編】【台帳自動化】FSOで収集したファイル属性(パス・サイズ・作成日)をCSV出力しファイル管理台帳を作成 – VBScript (Visual Basic Scripting Edition)解析バイブル

スポンサーリンク

VBScriptを掌握せよ:FSOで構築する「堅牢なファイル管理台帳自動化」の極意

現場のシステム管理において、「ファイル台帳」の作成は避けて通れない作業だ。だが、数万件のファイルを手作業で集計するような愚行は即刻やめるべきだ。

VBScriptはレガシーだと揶揄されることもあるが、OS標準の実行環境で動くその「軽快さ」と「即時性」は、今なお自動化エンジニアにとって強力な武器となる。今回は、単に動くだけのコードではなく、「大規模データでもクラッシュせず、保守性を担保する」プロフェッショナルな設計を伝授する。

—

1. なぜ「雑なコード」は破綻するのか?

多くのエンジニアが犯す過ちは以下の3点だ。

1. メモリリークの放置: オブジェクト生成をループ内で繰り返したまま解放しない。
2. エンコーディングの無視: 日本語パスや特殊文字が含まれる際、CSVが文字化けする。
3. エラーハンドリングの欠如: 権限のないフォルダにアクセスした際、スクリプトが即座に停止する。

今回提供するコードは、これらを排した「プロダクションレベル」の実装だ。

—

2. 堅牢なファイル管理台帳生成スクリプト

このコードを `.vbs` 拡張子で保存し、実行してほしい。FileSystemObject(FSO)の再帰的呼び出しを用いて、階層構造を効率的にトレースする。

‘ =================================================================
‘ FileInventoryGenerator.vbs
‘ 目的: 指定フォルダ配下の全ファイルをCSVにエクスポート
‘ 設計思想: 再帰処理による階層走査とストリーム書き込み
‘ =================================================================
Option Explicit

Dim fso, targetFolder, csvFile, objStream

‘ 設定値
Const TARGET_PATH = “C:\TargetDirectory” ‘ 対象のルートパス
Const OUTPUT_PATH = “C:\Report\FileInventory.csv” ‘ 出力先

Set fso = CreateObject(“Scripting.FileSystemObject”)
‘ ADODB.Streamを使用してUTF-8(BOM付き)で保存(Excel文字化け対策)
Set objStream = CreateObject(“ADODB.Stream”)
objStream.Type = 2 ‘ adTypeText
objStream.Charset = “UTF-8”
objStream.Open

‘ ヘッダー書き込み
objStream.WriteText “パス,サイズ(Byte),作成日時,最終アクセス日時” & vbCrLf

‘ 処理開始
If fso.FolderExists(TARGET_PATH) Then
Set targetFolder = fso.GetFolder(TARGET_PATH)
Call ScanFolder(targetFolder)

‘ ファイル保存
objStream.SaveToFile OUTPUT_PATH, 2 ‘ adSaveCreateOverWrite
objStream.Close
MsgBox “台帳作成完了: ” & OUTPUT_PATH, 64, “成功”
Else
MsgBox “指定フォルダが存在しません。”, 16, “エラー”
End If

‘ 終了処理
Set objStream = Nothing
Set fso = Nothing

‘ 再帰的なフォルダスキャン関数
Sub ScanFolder(folder)
Dim file, subFolder

‘ ファイル情報の抽出
On Error Resume Next ‘ 権限エラーを回避
For Each file In folder.Files
objStream.WriteText file.Path & “,” & file.Size & “,” & file.DateCreated & “,” & file.DateLastAccessed & vbCrLf
Next

‘ サブフォルダを再帰的に巡回
For Each subFolder In folder.SubFolders
Call ScanFolder(subFolder)
Next
On Error GoTo 0
End Sub

—

3. この設計の「プロのこだわり」

① ADODB.Stream を選ぶ理由

通常の `Scripting.FileSystemObject` の `CreateTextFile` は、文字コードが「Shift-JIS(ASCII)」に固定されることが多い。現代の環境でExcelを開くと、ファイル名に特殊文字が含まれていた瞬間に文字化けが発生する。`ADODB.Stream` を使用し、UTF-8で出力することで、このリスクを根本から断っている。

② エラーハンドリングの戦略

`On Error Resume Next` は諸刃の剣だ。しかし、システム管理ツールにおいて「権限のないフォルダ一つで全体の処理が止まる」のは致命的なUXとなる。そのため、ファイルアクセス部分のみを局所的に保護し、再帰処理を継続させる設計を採用している。

③ パフォーマンスの最適化

オブジェクトをループの外側で維持し、書き込みのバッファリングを意識している。膨大なファイル数を扱う場合、コンソール出力よりもファイルストリームへの連続書き込みの方が、リソース消費が圧倒的に少ない。

—

結論:自動化は「設計」で決まる

VBScriptは単なるレガシーではない。「OSに何もインストールさせず、今すぐ現場を改善する」ための究極のツールだ。

今回のコードをテンプレートとして、必要であれば「拡張子によるフィルタリング」や「特定のファイルサイズ以上のみ抽出」といったロジックを追加してほしい。自動化とは、一度書いたロジックが、自分がいなくても現場で正確に動き続ける仕組みを作ることだ。

君たちの業務が、このツールによって少しでも「創造的な仕事」に充てられることを期待している。

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