【问题标题】:spaces in for /f forfiles batch not working/f forfiles 批处理中的空格不起作用
【发布时间】:2015-02-27 14:14:06
【问题描述】:

我正在尝试制作一个自动删除旧文件的脚本,这是我迄今为止想出的。

首先我为用户主目录创建一个输入文件。

命令:

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.

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

我该如何解决这个问题?

【问题讨论】:

    标签: batch-file for-loop cmd spaces


    【解决方案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 循环另一个命令的输出(无需中间文件),将两个命令组合在一行中:

    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.

    【讨论】:

    • 非常感谢大卫非常完整地回答我的问题,非常感谢!
    • 这需要脚本是F盘吗?我问是因为它现在声明('dir downloads /s /b')
    • 是的,您需要在驱动器 f 上,就像您运行创建 input.txt 的原始命令时一样。
    【解决方案2】:

    在 %%G 周围加上引号。

    FOR /f %%G in (input.txt) DO forfiles /p "%%G" /C "cmd /c del %%G\*.* /q" /D -30
    

    【讨论】:

    • 您好,SomethingDark,感谢您帮助我!我在 %%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 不是可以在您的计算机上找到的目录
    【解决方案3】:

    将“tokens=*”放在“for /f”中

     For /f "tokens=*" 
    

    所以你得到整行,而不仅仅是第一个“令牌”到空格

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-10-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-08-03
      • 2015-03-08
      相关资源
      最近更新 更多