我正在尝试制作一个自动删除旧文件的脚本,这是我到目前为止所想出的。
首先,我为用户主目录创建一个输入文件。
命令:
dir downloads /s /b echo > input.txt
它会像这样填充 .txt 文件:
F:\HomeDirs\a.Durge\Mijn Documenten\Downloads
F:\HomeDirs\a.eimers\Mijn Documenten\Downloads
F:\HomeDirs\a.eimers\system\Downloads
F:\HomeDirs\a.gacem\system\Downloads
输入文件填满后,我希望将此作为输入来删除名为 downloads 的文件夹中超过 30 天的文件
FOR /f %%G in (input.txt) DO forfiles /p %%G /C "cmd /c del %%G\*.* /q" /D -30
这在一定程度上有效,包含空格的文件路径不受影响。
我尝试在路径周围添加引号,但我认为我在某个地方搞砸了。
这是批处理给我的错误:
D:\Scripts>forfiles /p "F:\HomeDirs\a.Durge\Mijn /C "cmd /c del "F:\HomeDirs\a.Durge\Mijn\*.* /q" /D -30
ERROR: Invalid argument/option - 'F:\HomeDirs\a.Durge\Mijn\*.* /q'.
Type "FORFILES /?" for usage.
不包含空格的文件路径会被正确处理。
我该如何解决这个问题?
最佳答案
您的 for/f
命令使用 space
作为分隔符(space
和 tab
是默认分隔符)。
因此 F:\HomeDirs\a.Durge\Mijn Documenten\Downloads
将返回两个 token 。
F:\HomeDirs\a.Durge\Mijn
Documenten\Downloads
要阻止这种情况发生,请在命令中添加 "delims="
(完全不使用分隔符):
FOR /f "delims=" %%G in (input.txt) DO forfiles /p %%G /C "cmd /c del %%G\*.* /q" /D -30
您可以通过使用不同类型的 for
来进一步简化事情,它针对另一个命令的输出进行循环(无需中间文件),将两个命令组合在一行中:
FOR /f "delims=" %%G in ('dir downloads /s /b') DO forfiles /p %%G /C "cmd /c del %%G\*.* /q" /D -30
参见FOR /F Loop command: against the results of another command.了解更多信息。
关于batch-file - for/f forfiles 批处理中的空格不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28767124/