【问题标题】:Batch extract rars with spaces in names批量提取名称中带有空格的 rars
【发布时间】:2009-05-04 22:11:56
【问题描述】:

我正在尝试批量提取某些目录中某些 zip 中的一些 rar。长话短说,这是我在 rar 文件中的循环:

for %%r in (*.rar) do (

unrar x %%r
)

问题是 %%r 得到了错误的值。如果文件名为“file name.rar”,则 %%r 获取值“file” - 它在文件名的第一个空格处停止。

如何让这个循环处理名称中带有空格的文件?

谢谢

【问题讨论】:

    标签: file batch-file space


    【解决方案1】:

    试试这个:

    for /f "usebackq delims==" %i in (`dir /b *.rar`) do unrar x "%i"
    

    如果您在批处理文件中使用它,请记住您需要将百分号加倍才能转义它们。

    【讨论】:

      【解决方案2】:

      %%r 将包含完整的文件名,包括空格。问题出在你打给unrar 的电话。如果文件名包含空格,则必须将其括在引号中,否则unrar 将无法看到filename.rar 这两个(空格分隔的)参数实际上是带有空格的单个文件名.

      所以以下将起作用:

      for %%r in (*.rar) do unrar "%%r"
      

      此外,如果您对问题出在哪里感到好奇,有时将程序调用简单地替换为 echo 会很有帮助:

      for %%r in (*.rar) do @echo %%r
      

      您会看到 %%r 包含文件名中的空格并且不会将它们分开。

      【讨论】:

      • 我想过,但还是不行。看起来 %%r 确实有一个错误的值,而引号会起到很大的作用。也许我还有其他问题……我不知道。
      【解决方案3】:

      问题是'for' 使用空格作为默认分隔符。您可以使用 delims = xxx 进行设置。查看here 的语法。或者你可以使用ForFiles

      【讨论】:

      • cmd 也不是一个 UNIX shell,它在任何看到星号的地方都会进行 globbing。对于每个 rar 文件,无论是否有空格,您都将其文件名完全包含在 %%r 中。
      猜你喜欢
      • 1970-01-01
      • 2020-10-08
      • 2012-11-29
      • 2018-04-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-07-12
      相关资源
      最近更新 更多