【问题标题】:Reading in paths with spaces from file using Windows command line FOR loop使用 Windows 命令行 FOR 循环从文件中读取带有空格的路径
【发布时间】: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.txttest_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 搜索查找我使用 fordelims 编写的答案,正如我解释它们在我所有的答案中都非常详细。
  • @Mofi 谢谢你,你的第一个建议奏效了。通读输出帮助,我看到了delims=%~ 的使用。 %~i 周围多余的"" 是要重新加引号吗?
  • 是的,对于文本文件中的d:\test\test with space 002.txt,必须在将文件名传递给命令del 时添加双引号。 %~i"d:\test\test with space 001.txt" 中删除周围的",因为在命令行上指定了所需的周围"" 总是需要包含空格或这些字符之一的文件名字符串&()[]{}^=;!'+,`~

标签: for-loop cmd path whitespace


【解决方案1】:

根据@Mofi's comment,我的问题的解决方案是使用:

for /F "usebackq eol=| delims=" %i in ("d:\testfiles.txt") do del "%~i"

【讨论】:

  • 由于列出的一个或多个文件不存在是完全可行的,我要么先检查,要么将任何“找不到”消息重定向到 NUL 设备,例如For /F UseBackEOL^=^"Delims^=^" %I In ("D:\testfiles.txt")Do @If Exist "%I" Del /A/F "%I"For /F "UseBackQ EOL=| Delims=" %I In ("D:\testfiles.txt") Do @Del "%~I" 2> NUL.
猜你喜欢
  • 1970-01-01
  • 2012-08-29
  • 2012-02-26
  • 2018-06-01
  • 1970-01-01
  • 1970-01-01
  • 2022-10-05
  • 1970-01-01
  • 2016-01-13
相关资源
最近更新 更多