VBSでフォルダ内のファイル数カウント

手作業でやるのも大変なので必要に迫られて
VBScriptで指定フォルダ内のファイル数をカウントするスクリプトを
作ってみました。

指定したフォルダ内のファイル数をカウントして
"フルパスフォルダ名","ファイル数"という形式でファイル出力するという
ほんまに超単純な機能を持つスクリプトです。スピードは3,000ファイル処理で30秒と
実用にはやや厳しいかもしれないです。出力したファイルはEXCELで加工
*たぶんファイル書き込みの前の条件判定とループのダブルミックスで重いのかも
知れないですね・・・。

保存されているファイルの先頭にはyyyymmddと日付がついているので
日付毎のファイル数の推移を見れば月毎の繁閑を見ることができるんですが
それは別の機会に・・・。


’指定フォルダ内のファイル数をカウントしてログファイルに出力
Set fso = CreateObject("Scripting.FileSystemObject")
Private Const TARGETFOLDER = "分析パス指定"   'カウント対象パス
Private Const OUTFILENAME  = "ログファイル名"  '出力ログ

Call Main()
WScript.Quit 0

Sub Main()
   Dim objFS, objFolder
   Dim strm, dest
   Set objFS = CreateObject("Scripting.FileSystemObject")
   ' 出力ログのストリームを生成
   dest = objFS.BuildPath( GetScriptPath(objFS), OUTFILENAME )
   Set strm = objFS.CreateTextFile( dest )
   ' ファイルをリストアップ
   Set objFolder = objFS.GetFolder( TARGETFOLDER )
   Call WriteFilePathAll(objFolder, strm)
   strm.Close
   WScript.Echo( "OK" )
End Sub

'フォルダパスの取得
Sub WriteFilePathAll(ByVal objFolder, ByVal strm)
       Dim subfolders, objSub
       Dim objFile, files ,fso
       Dim i

       Set fso = CreateObject("Scripting.FileSystemObject")
       Set subfolders = objFolder.SubFolders
       Set files = objFolder.Files

       ' 指定のフォルダに格納された各サブフォルダをログ出力
       i = 0
       For Each objFile In files
         strFolder = fso.GetParentFolderName(objFile.Path)
         i = i + 1
       Next

       if i <> 0 then strm.WriteLine strFolder & "," & i       'ファイル数0件は出力しない。
'       ' サブフォルダに対して再帰処理
       For Each objSub In subfolders
         Call WriteFilePathAll( objSub, strm )
       Next
End Sub

'出力ログのパス指定(スクリプトと同じパス)
Public Function GetScriptPath(ByVal objFS)
   Dim path
   path = WScript.ScriptFullName
   GetScriptPath = Left( path, InStrRev(path, "\") - 1 )
End Function

コメント

このブログの人気の投稿

証券外務員1種勉強(計算式暗記用メモ)

GASでGoogleDriveのサブフォルダとファイル一覧を出力する

マクロ経済学(IS-LM分析)