Windows“dir”命令:指定“/s”时按日期对文件进行排序

ale*_*een 4 windows cmd batch-file windows-console

目标:我想使用批处理文件将具有特定扩展名的最新文件从“源目录”复制到“目标目录”。最新文件可能位于源目录内的多个子目录下。

这个问题/答案/s正是我想要的,但是指定选项时它似乎没有排序(正如此评论所建议的那样):

FOR /F "delims=|" %%I IN ('DIR "K:\path\tp\source\dir\*.ext" /B /S /O:D') DO SET NewestFile=%%I
copy "%NewestFile%" "C:\path\to\destination\dir"
Run Code Online (Sandbox Code Playgroud)

你可以DIR "K:\path\tp\source\dir\*.ext" /B /S /O:D自己测试一下,看是否没有排序。

我尝试过的:这个命令本身确实有效:DIR "K:\path\tp\source\dir\*.ext" /S /B | sort但我不知道如何在 for 循环中使用它(批处理文件在我确定错误之前就退出了 - 即使最后有 a pause)。

有任何想法吗?

请参阅:目录文档

Squ*_*man 5

Powershell如果需要,您可以从批处理文件中调用。在较新版本的Powershell.

for /F "delims=" %%G IN ('powershell "gci -rec | where { ! $_.PSIsContainer } | sort LastWriteTime | select -last 1 | Select-Object fullname"') do set NewestFile=%%G
Run Code Online (Sandbox Code Playgroud)

完整答案:

cd /d "K:\path\to\source\dir"
for /F "delims=" %%G IN ('powershell "gci -rec *.ext | where { ! $_.PSIsContainer } | sort LastWriteTime | select -last 1 | Select-Object fullname"') do set NewestFile=%%G
copy "%NewestFile%" "C:\path\to\dest\dir"
Run Code Online (Sandbox Code Playgroud)