【发布时间】:2020-08-06 17:16:29
【问题描述】:
我有一个要删除的文本文件中的文件列表。我正在尝试将 Windows 命令行 FOR 与 DEL 一起使用来完成此操作。我遇到的问题是某些路径中有空格。我试过在文本文件中使用双引号,但是命令行会抛出一个错误,说它可以找到路径。下面有错误的示例路径。
d:\testfiles.txt 中的文件列表示例
d:\test\test_001.txt
d:\test\test_002.txt
"d:\test\test with space 001.txt"
d:\test\test with space 002.txt
命令行:for /F %i in (d:\testfiles.txt) do del %i
test_001.txt 和 test_002.txt 删除没问题,但是命令行会报错
Could Not Find d:\test\test
对于最后两个文件。
【问题讨论】:
-
for /F "delims=" %i in (d:\testfiles.txt) do del "%~i"使用带有空分隔符列表的选项delims=来完全关闭行拆分行为。for /F "eol=| delims=" %i in (d:\testfiles.txt) do del "%~i"也适用于文本文件中没有以分号开头的路径的文件名。有关更多详细信息,请在命令提示符窗口for /?中运行,并仔细阅读从第一页顶部到最后一页底部的整个输出帮助,或使用 Stack Overflow 搜索查找我使用for和delims编写的答案,正如我解释它们在我所有的答案中都非常详细。 -
@Mofi 谢谢你,你的第一个建议奏效了。通读输出帮助,我看到了
delims=和%~的使用。%~i周围多余的""是要重新加引号吗? -
是的,对于文本文件中的
d:\test\test with space 002.txt,必须在将文件名传递给命令del时添加双引号。%~i从"d:\test\test with space 001.txt"中删除周围的",因为在命令行上指定了所需的周围"。"总是需要包含空格或这些字符之一的文件名字符串&()[]{}^=;!'+,`~。
标签: for-loop cmd path whitespace