大量のログファイルから最新のファイルのみを取得する必要があったので、簡単なスクリプトを書いてみました。
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)で似たようなことができるので、わざわざスクリプトを書く必要はなかったですね💦
この記事へのコメントはありません。