小さい頃はエラ呼吸

いつのまにやら肺で呼吸をしています。


指定されたディレクトリ配下のファイルの情報を一覧で出力するスクリプト

ラメタで指定されたディレクトリ配下にあるファイルの最終更新日時、ファイルファイルサイズ、ファイル名、ファイルバージョンをリスト表示し、結果ログに出力するVBScriptを作ってみました。コマンドプロンプトで

dir /s

って実行したのとほとんど同じですが、ファイルのバージョン情報も欲しいときは、使えるかもしれません。実行結果は、同じディレクトリのFileListCreator.logというファイルに結果が出力されます。

Option Explicit
Call Main()
Sub Main()

  Dim out
  Dim folderPath
  Dim fso
  Dim ts
  Dim isWS
  Dim ws
  
  ' 規定のスクリプトホストがWscriptなら、Cscriptに変更する
  isWS = IsWScript()
  If isWS Then
    Set ws = WScript.CreateObject( "WScript.Shell" )
    Call ws.Run("cscript.exe /H:Cscript", 0, True)
  End If
  
  ' パラメタを取得
  If Wscript.Arguments.Count = 0 Then
    folderPath = "."
  Else
    folderPath = Wscript.Arguments(0)
  End If
  
  Set fso = CreateObject("Scripting.FileSystemObject")
  
  ' サブフォルダに対して、再帰的に処理する
  out = ShowSubfolders(fso, fso.GetFolder(folderPath))
  
  ' 検索結果をファイルに出力
  Set ts = fso.CreateTextFile(folderPath & "\" & "FileListCreator.log")
  ts.WriteLine(out)
  ts.close
  
  ' 規定のスクリプトホストを元に戻す
  If isWS Then
    Call ws.Run("cscript.exe /H:Wscript", 0, True)
  End If
  
End Sub

' 規定のスクリプトホストがWscriptかどうかを調べる
Function IsWScript()
  
  Dim registoryValue
  Dim ws
  
  IsWScript = False
  
  ' レジストリの読み込み
  Set ws = WScript.CreateObject( "WScript.Shell" )
  registoryValue = ws.RegRead("HKLM\SOFTWARE\Classes\VBSFile\Shell\Open\Command\")
  
  ' 規定のスクリプトホストがWscriptの場合
  If InStr(1, registoryValue, "WSCRIPT", 1) > 0 Then
    IsWScript = True
  End If

End Function

' サブティレクト内のファイル一覧を取得する
Function ShowSubFolders(fso, folder)
  
  Dim file
  Dim returnValue
  Dim Subfolder
  Dim tmp
  
  returnValue = ""
  
  tmp = folder.DateLastModified & vbTab & "<DIR>" & vbTab & vbTab & folder.name
  WScript.Echo tmp
  returnValue = returnValue & tmp & vbNewLine
  
  For Each file in folder.Files
    
    tmp = file.DateLastModified & _
          vbTab & _
          vbTab & _
          FormatNumber(file.Size, False, False, False, True) & _
          vbTab & _
          file.name & _
          vbTab & _
          fso.GetFileVersion(file.path)
          
    WScript.Echo tmp
    returnValue = returnValue & tmp & vbNewLine
    
  Next
  
  ' folder配下のフォルダを列挙する
  For Each Subfolder in folder.SubFolders
    ' 再帰呼び出し
    returnValue = returnValue & ShowSubFolders(fso, Subfolder)
  Next
  
  ShowSubFolders = returnValue
  
End Function