1

Тема: VBScript: получение отсортированного списка файлов каталога

Одним из вариантов может быть использование ADO: создание отсоединённого набора записей потребной структуры, последовательное заполнение его содержимым каталога, сортировка по потребному полю (в примере — по дате/времени последней модификации) и последующее чтение из отсортированного набора записей.

Option Explicit

Const adDate = 7
Const adVarChar = 200


Dim strFolder

Dim objFSO
Dim objFile


strFolder = "C:\Temp"

Set objFSO = WScript.CreateObject("Scripting.FileSystemObject")

With WScript.CreateObject("ADODB.Recordset")
    With .Fields
        .Append "Path",             adVarChar, 2^15 - 1
        .Append "DateLastModified", adDate
    End With
    
    .Open
    .Sort = "DateLastModified DESC"
    
    For Each objFile In objFSO.GetFolder(strFolder).Files
        .AddNew Array("Path", "DateLastModified"), Array(objFile.Path, objFile.DateLastModified)
    Next
    
    .MoveFirst
    
    Do Until .EOF
        With .Fields
            WScript.Echo .Item("DateLastModified").Value, vbTab, .Item("Path").Value
        End With
        
        .MoveNext
    Loop
    
    .Close
End With

WScript.Quit 0

2

Re: VBScript: получение отсортированного списка файлов каталога

Другим, более простым вариантом может стать использование Log Parser 2.2 (VBScript: работаем с утилитой LogParser от Microsoft):

Option Explicit

Dim objLogQuery
Dim objCOMFileSystemInputContext

Dim strQuery


Set objLogQuery                  = WScript.CreateObject("MSUtil.LogQuery")
Set objCOMFileSystemInputContext = WScript.CreateObject("MSUtil.LogQuery.FileSystemInputFormat")

With objCOMFileSystemInputContext
    .recurse             = False
    .useLocalTime        = True
    .preserveLastAccTime = True
End With

strQuery = "SELECT Path, LastWriteTime, Attributes FROM 'c:\Temp\*.*' WHERE Attributes NOT LIKE 'D________' ORDER BY LastWriteTime DESC"

With objLogQuery.Execute(strQuery, objCOMFileSystemInputContext)
    Do Until .atEnd
        With .getRecord
            WScript.Echo .getValue("LastWriteTime"), vbTab, .getValue("Path")
        End With
        
        .moveNext
    Loop
    
    .close
End With

Set objCOMFileSystemInputContext = Nothing
Set objLogQuery                  = Nothing

WScript.Quit 0

В данном примере так же осуществляется сортировка файлов по дате/времени последней модификации.