在我的硬盘上,我每天都会创建数百个子文件夹,其中可能包含特定的文本文件(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