使用递归目录命令获取最新文件的命令行

使用递归目录命令获取最新文件的命令行

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

相关内容