BATCH - 在目录文件上使用FOR循环,按创建日期/时间排序

时间:2018-03-11 00:04:12

标签: windows batch-file

我想根据创建日期(或至少上次修改)在目录中订购文件。

我有这段代码:

FOR /R "directory" %%F IN (*.filetype) DO echo "command" "%%F" > "another\directory\%%~nF.tsv"

...在没有特定顺序的情况下对文件运行for循环(按字母顺序排列?)。

我希望能做的是:

FOR /R "direcotry\*.filetype" %%F IN ('dir /o-d /b "directory"') DO echo "command" "%%F" > "another\directory\%%~nF.tsv"

较低的代码不起作用,但您可能会看到我的意思。 我精通BASH但不在BATCH

密钥是dir /o-d /b "drive:\directory\*.filetype",它按创建日期(反向顺序)排序,然后只吐出文件名 - 但我不知道如何将其用于for循环以获取文件名,然后对它们运行命令。

2 个答案:

答案 0 :(得分:0)

FOR /F "delims=" %%F IN ('dir /o-d /tc /b /s "directory\*.filetype"') DO echo "command" "%%F" >> "another\directory\%%~nF.tsv"

for/f处理"文件"的文字。

"delims="关闭令牌,以便输出"输出"来自dir已分配。

/tc使用创建日期(o/[-]d省略= NTFS驱动器的字母顺序,FAT上的storge-order)

/s添加子目录

>>附加到输出文件。

OR

...DO "command" "%%F"

直接执行命令而不创建文件。

答案 1 :(得分:0)

由于对其他答案的评论中提到的限制,这是一个利用PowerShell的潜在解决方法:

@For /F "Delims=" %%A In (
    'Powershell "(GCI "directory" -R *.filetype|Sort CreationTime -Des)|%%{$_.Fullname}"'
) Do @"command" "%%A">"another\directory\%%~nA.tsv"

显然根据需要调整directoryfiletype"command"another\directory