Batch file for/f forfiles批处理中的空格无效
我正在尝试制作一个自动删除旧文件的脚本,这就是我到目前为止的想法 首先,我为用户home dirs创建一个输入文件 命令:Batch file for/f forfiles批处理中的空格无效,batch-file,for-loop,cmd,spaces,Batch File,For Loop,Cmd,Spaces,我正在尝试制作一个自动删除旧文件的脚本,这就是我到目前为止的想法 首先,我为用户home dirs创建一个输入文件 命令: 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
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.
正确处理不包含空格的文件路径
如何解决此问题?在%%G周围加引号
FOR /f %%G in (input.txt) DO forfiles /p "%%G" /C "cmd /c del %%G\*.* /q" /D -30
将“tokens=*”放在“for/f”中
因此,您将获得整行,而不仅仅是第一个到达空格的“标记”您的
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
有关更多信息,请参阅。嗨,Something Dark,ty,谢谢你帮助我!我在%%G周围添加了引号,并再次测试了脚本。它给我这个输出:D:\Scripts>forfiles/p“F:\HomeDirs\a.Durge\Mijn”/C“cmd/C del F:\HomeDirs\a.Durge\Mijn*/q”/D-30错误:指定的目录不存在。@Sydney-听起来像是F:\HomeDirs\a.Durge\Mijn不是一个可以在您的计算机上找到的目录。非常感谢David对我的问题的非常完整的回答,非常感谢!这是否要求脚本是F驱动器的脚本?我这样问是因为它现在声明('dir downloads/s/b')是的,您需要在驱动器f上,就像您运行创建input.txt的原始命令一样。
FOR /f "delims=" %%G in ('dir downloads /s /b') DO forfiles /p %%G /C "cmd /c del %%G\*.* /q" /D -30