大量のログファイルから最新のファイルのみを取得する必要があったので、簡単なスクリプトを書いてみました。
Option Explicit
Dim Args
Set Args = WScript.Arguments
If Args.Count < 1 Then WScript.Quit
If CreateObject("Scripting.FileSystemObject").FolderExists(Args(0)) = False Then WScript.Quit
WScript.Echo GetRecentlyModifiedFile(Args(0))
Private Function GetRecentlyModifiedFile(ByVal FolderPath)
'指定したフォルダ内で最も更新日時の新しいファイルのパスを取得
Dim fs, f
Dim d
Dim ret
With CreateObject("Scripting.FileSystemObject")
Set fs = .GetFolder(FolderPath).Files
If fs.Count > 0 Then
For Each f In fs
If d < f.DateLastModified Then
ret = f.Path
d = f.DateLastModified
End If
Next
End If
End With
GetRecentlyModifiedFile = ret
End Function
引数として渡されたフォルダ内のファイルの更新日時を順番に見ていって、最も新しいファイルのパスを返すだけの簡単なコードです。
ついでに、フォルダ内のファイルの更新日時を一覧表示するスクリプトも書いてみました。
こちらはレコードセットを使用する形に変更してあります。
Option Explicit
Dim Args
Set Args = WScript.Arguments
If Args.Count < 1 Then WScript.Quit
If CreateObject("Scripting.FileSystemObject").FolderExists(Args(0)) = False Then WScript.Quit
ListRecentlyModifiedFiles Args(0)
Private Sub ListRecentlyModifiedFiles(ByVal FolderPath)
'指定したフォルダ内のファイルを更新日時順で列挙
Dim rs, fs, f
Const adWChar = 130
Const adDBTimeStamp = 135
With CreateObject("Scripting.FileSystemObject")
Set fs = .GetFolder(FolderPath).Files
If fs.Count > 0 Then
'レコードセット設定
Set rs = CreateObject("ADODB.Recordset")
rs.Fields.Append "ModifyDate", adDBTimeStamp, 255
rs.Fields.Append "Path", adWChar, 255
rs.Open
For Each f In fs
rs.AddNew
rs.Fields("ModifyDate").Value = f.DateLastModified
rs.Fields("Path").Value = f.Path
rs.Update
Next
rs.Sort = "ModifyDate DESC" '更新日時で降順ソート
rs.MoveFirst
Do Until rs.EOF
WScript.Echo rs.Fields("ModifyDate").Value & vbTab & rs.Fields("Path").Value
rs.MoveNext
Loop
rs.Close
End If
End With
End Sub
ここまで書いておいて何ですが、dirコマンド(dir /O:-D)で似たようなことができるので、わざわざスクリプトを書く必要はなかったですね💦















この記事へのコメントはありません。