Cmdline 在遞歸 dir 指令上取得最新文件

Cmdline 在遞歸 dir 指令上取得最新文件

在我的硬碟上,我每天創建數百個子資料夾,其中可能包含特定的文字檔案 (Tracker.txt)。

我想建立一個 cmdline 或 BAT 檔案來只取得一個結果,即最新的 tracker.txt 檔案及其完整路徑!

我嘗試過dir /s tracker.txt /OD,但結果沒有按日期過濾。

謝謝你!

答案1

您可以將DIR /B /S /OD "tracker.txt"命令結果透過管道傳輸到臨時日誌文件,但讓它使用循環FOR替換來放置與名稱匹配的每個文件的日期時間戳,後跟逗號,然後是完整的顯式路徑和文件名(即YYYY-MM-DD hh:mm [AM/PM])。

然後,您SORT對該檔案使用該命令將該檔案中的所有行排序到新的排序檔案中,但最新的時間戳檔案位於清單底部。

最後,您將FOR使用逗號作為分隔符號對最終檔案清單運行最終循環,然後僅將該循環中的迭代器變數設為每個完整的明確路徑,當它到達該清單的底部時,這是最新的文件是SET最後一個,然後您可以對最後設定的變數執行某些操作,該變數是您遞歸指定的所有目錄中的最新文件日期戳記。


批次腳本範例

請務必將變數的值設為SET StartDir=DIR 指令啟動的根資料夾,以便遞歸查找檔案。

@ECHO ON

SET StartDir=C:\Users\User\Desktop\Test

IF EXIST "%temp%\~dir1temp.dat" DEL /Q /F "%temp%\~dir1temp.dat"
FOR /F "TOKENS=*" %%A IN ('Dir /B /S /OD "%StartDir%\tracker.txt"') DO ECHO %%~TA, %%~FPNXA>>"%temp%\~dir1temp.dat"

IF EXIST "%temp%\~dirsorttemp.dat" DEL /Q /F "%temp%\~dirsorttemp.dat"
SORT "%temp%\~dir1temp.dat">>"%temp%\~dirsorttemp.dat"

FOR /F "TOKENS=2 DELIMS=," %%A IN (%temp%\~dirsorttemp.dat) DO (SET File=%%~A)

ECHO %File%
:::<command to do something with %file%>
PAUSE

更多資源

  • 種類
  • 對於/F
  • FOR /?(批量替換)

    In addition, substitution of FOR variable references has been enhanced.
    You can now use the following optional syntax:
    
    %~fI        - expands %I to a fully qualified path name
    %~tI        - expands %I to date/time of file
    

相關內容