for /f forfiles 批处理中的空格不起作用
spaces in for /f forfiles batch not working
我正在尝试制作一个自动删除旧文件的脚本,这是我到目前为止想出的。
首先,我为用户主目录创建了一个输入文件。
命令:
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
输入文件填满后,我希望将其作为输入,以删除名为下载的文件夹中超过 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.
不包含空格的文件路径被正确处理。
我该如何解决这个问题?
在 %%G 周围加上引号。
FOR /f %%G in (input.txt) DO forfiles /p "%%G" /C "cmd /c del %%G\*.* /q" /D -30
将 "tokens=*" 放入 "for /f"
For /f "tokens=*"
所以你得到整行,而不仅仅是第一个 "token" 到 space
您的 for /f
命令使用 space
作为分隔符(space
和 tab
是默认分隔符)。
所以F:\HomeDirs\a.Durge\Mijn Documenten\Downloads
将return两个令牌。
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.。
我正在尝试制作一个自动删除旧文件的脚本,这是我到目前为止想出的。
首先,我为用户主目录创建了一个输入文件。
命令:
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
输入文件填满后,我希望将其作为输入,以删除名为下载的文件夹中超过 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.
不包含空格的文件路径被正确处理。
我该如何解决这个问题?
在 %%G 周围加上引号。
FOR /f %%G in (input.txt) DO forfiles /p "%%G" /C "cmd /c del %%G\*.* /q" /D -30
将 "tokens=*" 放入 "for /f"
For /f "tokens=*"
所以你得到整行,而不仅仅是第一个 "token" 到 space
您的 for /f
命令使用 space
作为分隔符(space
和 tab
是默认分隔符)。
所以F:\HomeDirs\a.Durge\Mijn Documenten\Downloads
将return两个令牌。
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.。