我试图制作一个自动旧文件删除脚本,这是我到目前为止所提出的。
首先,我为用户家庭目录制作一个输入文件。
命令:
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.
正确处理不包含空格的文件路径。
我该如何解决这个问题?
答案 0 :(得分:1)
在%% G。
周围加上引号FOR /f %%G in (input.txt) DO forfiles /p "%%G" /C "cmd /c del %%G\*.* /q" /D -30
答案 1 :(得分:1)
您的for /f
命令使用space
作为分隔符(space
,tab
是默认分隔符。)
因此F:\HomeDirs\a.Durge\Mijn Documenten\Downloads
将返回两个令牌。
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
针对另一个命令的输出进行循环(无需中间文件),将两个命令组合在一行中:
{{1}}
有关详细信息,请参阅FOR /F Loop command: against the results of another command.。
答案 2 :(得分:0)
将“tokens = *”放入“for / f”
For /f "tokens=*"
所以你得到的不仅仅是第一个“令牌”直到空间