Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Batch file for/f forfiles批处理中的空格无效_Batch File_For Loop_Cmd_Spaces - Fatal编程技术网

Batch file for/f forfiles批处理中的空格无效

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

我正在尝试制作一个自动删除旧文件的脚本,这就是我到目前为止的想法

首先,我为用户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
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