フルパスでファイルリストを取得しつつファイルの各種情報を取得したい。

フルパスでサブディレクトリも含めファイルリストを取得しつつファイルの各種情報を取得したい時が人にはあります。
1万ファイル近くあるコンテンツディレクトリの変更管理監査をしなさい、とか言われた日には自動化でもしないとやっていられません。

フルパスだけであれば

C:\temp\gara>Dir /B /S
C:\temp\gara\data
C:\temp\gara\garapon.ini
C:\temp\gara\temp
C:\temp\gara\users
C:\temp\gara\users.txt

で取得できるのだけど、これだとファイルサイズとか最終更新日とかわからない。ついでにディレクトリも出てきてしまう。
Dirコマンドとか、色々調べたのだけどWin標準コマンドだけでは出来ないっぽい。
Linuxなら色々やり方あるのになぁとゲイツを呪ってもしょうがないのでVBSで作ってみた

VBSならファイルオブジェクトでデータが取れるので後はやりたいようにやればいい。

	Set objFileSys = CreateObject("Scripting.FileSystemObject")
	Set objInFile = objFileSys.OpenTextFile(strInFileName)
	objFile.Size               'サイズ
	objFile.Type               '種類
	objFile.DateCreated        '作成日
	objFile.DateLastAccessed   '最終アクセス日
	objFile.DateLastModified   '最終更新日

んで、後はこれをサブフォルダまで順繰りに見ていけばよいのですが
順繰りにみてくのがめんどかったのでさっきの「Dir /B /S」でファイルリストを作って
そのリストを読み込みながらファイルの情報を取得するようにした。

GetAllFileSize.cmd

Dir /B /S C:\temp\gara > list.txt
getFileInfo.vbs

んでそこから呼び出されるVBS

getFileInfo.vbs

Option Explicit

    Dim objFileSys
    Dim objFile
	Dim objInFile
	Dim objOutFile
	Dim strLine
	Dim strInFileName
	Dim strOutFileName
	Dim strNow

	'読み込みファイル名と結果ファイル名
	strInFileName = "list.txt"
	strNow = Now
	strOutFileName = Year(strNow) & Right("0" & Month(strNow), 2) &  Right("0" & Day(strNow), 2) & "_" & Right("0" & Hour(Now), 2) & Right("0" & Minute(strNow), 2) & "_fileInfo.txt"

    Set objFileSys = CreateObject("Scripting.FileSystemObject")
	Set objInFile = objFileSys.OpenTextFile(strInFileName)
	objFileSys.CreateTextFile strOutFileName
	Set objOutFile = objFileSys.OpenTextFile(strOutFileName,8)

	'ファイルの内容を全部読み終えるまでループ
	Do Until objInFile.AtEndOfStream = true
		'ファイルの内容を1行ずつ読み込む
		strLine = objInFile.ReadLine
		If objFileSys.FileExists(strLine) Then
			Set objFile = objFileSys.GetFile(strLine)
			'ファイル名+ファイルサイズ+最終更新日を表示
			objOutFile.WriteLine strLine & chr(9) & objFile.Size & chr(9) & objFile.DateLastModified 
		End If
	Loop
	objInFile.Close
	objOutFile.Close

すると指定ディレクトリ以下のサブディレクトリ配下全てのファイルのファイルサイズ、最終更新日が出るようになりました。

C:\temp\gara>GetAllFileSize.cmd
C:\temp\gara\garapon.ini	1148	2009/01/11 11:07:04
C:\temp\gara\users.txt	466	2009/01/11 11:07:04

あとはこれを定期的に取得してDiffをとれば何が変わったか分かりますね。
問題はまだまだVBSが重いってことだな。