batch-file - for/f forfiles 批处理中的空格不起作用

标签 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.

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

我该如何解决这个问题?

最佳答案

您的 for/f 命令使用 space 作为分隔符(spacetab 是默认分隔符)。

因此 F:\HomeDirs\a.Durge\Mijn Documenten\Downloads 将返回两个 token 。

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.了解更多信息。

关于batch-file - for/f forfiles 批处理中的空格不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28767124/

相关文章:

java - 如何从两个 hashMap 中检索公共(public)键并将结果放入 ArrayList

java runtime.exec cmd/c 解析引用参数

来自命令行的 C# 程序参数?

javascript - 带 for 循环的 setInterval/setTimeOut 函数显示意外结果

shell - 为什么在批处理程序的 FOR 循环中创建了一个额外的文件?

C# 我可以将命令提示符控件添加到我的应用程序吗

batch-file - 从 Powershell 脚本运行 BAT 文件的最安全方法

batch-file - 从文件名中提取数字

windows - Windows批处理文件中相当于NEQ、LSS、GTR等的符号

batch-file - 批处理文件变量范围问题