for / f forfiles批处理空间不起作用

时间:2015-02-27 14:14:06

标签: batch-file for-loop cmd spaces

我试图制作一个自动旧文件删除脚本,这是我到目前为止所提出的。

首先,我为用户家庭目录制作一个输入文件。

命令:

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.

正确处理不包含空格的文件路径。

我该如何解决这个问题?

3 个答案:

答案 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作为分隔符(spacetab是默认分隔符。)

因此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=*" 

所以你得到的不仅仅是第一个“令牌”直到空间