読者です 読者をやめる 読者になる 読者になる

小さい頃はエラ呼吸

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


指定したフォルダ配下のファイル一覧をCSV出力する

Windows
はじめに

指定したフォルダ配下のファイル一覧をCSV出力するvbscript作りました。

使い方

ソースプログラムをFileListCreator.vbsという名前で保存します。

cscript FileListCreator.vbs

引数を省略すると、カレントフォルダの配下を探索します。
または

cscript FileListCreator.vbs "C:\Users"
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 = "ファイルパス,ファイル名,拡張子,最終更新日時,作成日時,ファイルサイズ(byte),ファイルタイプ" & vbNewLine
  
  ' サブフォルダに対して、再帰的に処理する
  out = out & ShowSubfolders(fso, fso.GetFolder(folderPath))
  
  Dim wkNow
  wkNow= Year(Now())
  wkNow= wkNow & Right("0" & Month(Now()) , 2)
  wkNow= wkNow & Right("0" & Day(Now()) , 2)
  wkNow= wkNow & "_"
  wkNow= wkNow & Right("0" & Hour(Now()) , 2)
  wkNow= wkNow & Right("0" & Minute(Now()) , 2)
  wkNow= wkNow & Right("0" & Second(Now()) , 2)
  
  ' 検索結果をファイルに出力
  Dim csvFileName
  csvFileName = "C:\FileListCreator_" & wkNow & ".csv"
  Set ts = fso.CreateTextFile(csvFileName)
  ts.WriteLine(out)
  ts.close
  
  WScript.Echo csvFileName & "に出力しました。"
  
  ' 規定のスクリプトホストを元に戻す
  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
  
  For Each file in folder.Files
    
    tmp = file.ParentFolder & _
          "," & _
          file.Name & _
          "," & _
          fso.GetExtensionName(file.path) & _
          "," & _
          file.DateLastModified & _
          "," & _
          file.DateCreated & _
          "," & _
          file.Size & _
          "," & _
          file.Type
          
    '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
出力例
ファイルパス,ファイル名,拡張子,最終更新日時,作成日時,ファイルサイズ(byte),ファイルタイプ
C:\Program Files\Microsoft Visual Studio 11.0\VC\bin\1041,localespcui.dll,dll,2012/07/06 12:57:00,2012/07/06 12:57:00,43304,アプリケーション拡張
C:\Program Files\Microsoft Visual Studio 11.0\VC\bin\amd64\1041,localespcui.dll,dll,2013/07/22 15:14:04,2013/07/22 15:14:04,49960,アプリケーション拡張
C:\Program Files\Microsoft Visual Studio 11.0\VC\WPSDK\WP80\bin\1041,bscmakeui.dll,dll,2013/06/10 1:52:04,2013/06/10 1:52:04,21584,アプリケーション拡張
C:\Program Files\Microsoft Visual Studio 11.0\VC\WPSDK\WP80\bin\1041,clui.dll,dll,2013/06/10 1:52:04,2013/06/10 1:52:04,332872,アプリケーション拡張
C:\Program Files\Microsoft Visual Studio 11.0\VC\WPSDK\WP80\bin\1041,cvtresui.dll,dll,2013/06/10 1:52:04,2013/06/10 1:52:04,20048,アプリケーション拡張
C:\Program Files\Microsoft Visual Studio 11.0\VC\WPSDK\WP80\bin\1041,linkui.dll,dll,2013/06/10 1:52:04,2013/06/10 1:52:04,67144,アプリケーション拡張
C:\Program Files\Microsoft Visual Studio 11.0\VC\WPSDK\WP80\bin\1041,mspft110ui.dll,dll,2013/06/10 1:52:04,2013/06/10 1:52:04,63064,アプリケーション拡張
C:\Program Files\Microsoft Visual Studio 11.0\VC\WPSDK\WP80\bin\1041,nmakeui.dll,dll,2013/06/10 1:52:04,2013/06/10 1:52:04,25160,アプリケーション拡張
C:\Program Files\Microsoft Visual Studio 11.0\VC\WPSDK\WP80\bin\1041,vcomp110ui.dll,dll,2013/06/10 1:52:04,2013/06/10 1:52:04,20056,アプリケーション拡張
C:\Program Files\Microsoft Visual Studio 11.0\VC\WPSDK\WP80\bin\ja,xdcmake.resources.dll,dll,2013/06/10 1:52:06,2013/06/10 1:52:06,25712,アプリケーション拡張
C:\Program Files\Microsoft Visual Studio 11.0\VC\WPSDK\WP80\bin\x86_amd64\1041,clui.dll,dll,2013/06/10 1:52:06,2013/06/10 1:52:06,332864,アプリケーション拡張
C:\Program Files\Microsoft Visual Studio 11.0\VC\WPSDK\WP80\bin\x86_amd64\1041,linkui.dll,dll,2013/06/10 1:52:04,2013/06/10 1:52:04,67144,アプリケーション拡張