【问题标题】:How to copy directories with spaces in the name如何复制名称中带有空格的目录
【发布时间】:2012-08-15 05:05:42
【问题描述】:

我正在尝试使用 robocopy,但由于目录名称中的空格而无法使其工作。
我正在尝试将 3 个目录:我的文档、我的音乐和我的图片复制到“C:\test-backup”,但希望最终结果为
'C:\test-backup\我的文档'
'C:\test-backup\我的音乐'
'C:\test-backup\My Pictures'

我的命令不起作用:
robocopy C:\Users\Angie C:\test-backup "My Documents" /B /E /R:0 /CREATE /NP /TEE /XJ /LOG+:"CompleteBackupLog.txt"

无论我做什么,它都不会发生。有人有什么建议或技巧吗?

【问题讨论】:

    标签: directory spaces robocopy


    【解决方案1】:

    经过一些试验和错误并观察结果(换句话说,我破解了它),我让它工作了。

    使用带空格的路径名需要引号。诀窍是在结束引号之前的路径名之后必须有一个空格......就像这样......

    robocopy "C:\Source Path " "C:\Destination Path " /option1 /option2...
    

    这几乎看起来像一个错误,当然不是很直观。

    托德·K。

    【讨论】:

    • 托德,谢谢。为清楚起见:"C:\source path\ "(结束引号前有一个空格
    • 哇,多么不直观的要求!谢谢托德!
    • 我在另一个答案中看到了原因——最后一个反斜杠被视为转义字符,所以我不确定您的示例是否适用于“右引号后的空格”要求?无论如何,感谢您对这种特殊性的提醒(我不是 OP,只是路人)。绝对看起来仍然比任何东西都更像一个错误,否则 Robocopy 真的很愚蠢。毕竟,它不会被第一个“转义”引号弄糊涂。
    • 不太可能是错误,但绝对是错误,也未记录!对于谁可能关注 java 中的“mir option”调用:“ROBOCOPY”+“\””+ srcpath.replace(“/”,“\\”)+“\””+“\”“+ targetpath.replace( "/", "\\") + " \"" + " /MIR"
    • 非常感谢。这似乎是一个 robocopy 解析设计缺陷或长期存在的错误。
    【解决方案2】:

    如果路径不包含尾随反斜杠,则无需在右引号前添加空格,因此以下命令应该有效:

    robocopy "C:\Source Path" "C:\Destination Path" /option1 /option2...
    

    但是,以下将不起作用:

    robocopy "C:\Source Path\" "C:\Destination Path\" /option1 /option2...
    

    这是由于here 描述的转义问题:

    \ 转义可能会导致引用目录路径出现问题 包含尾随反斜杠,因为结束引号 " 在末尾 该行将被转义 \"。

    【讨论】:

    • 感谢您提供此行为背后的上下文详细信息。现在它有些道理,尽管它可能仍然不直观。当然,他们可以/应该以编程方式做得比这更好。在大多数情况下,很容易假设意图是什么。毕竟,它不会被第一个“转义”引号弄糊涂。
    • 这为我节省了相当多的命令行痛苦。谢谢分享!
    • 很好的解释。与 toddk63 的答案相比,这确实解释了为什么有两种可能性起作用。喜欢尾部反斜杠以澄清这是一个文件夹的人需要额外的空间,因为 robocopy 在双引号之前将其作为转义字符拾取。如果省略尾部反斜杠,则不再需要空格。
    【解决方案3】:

    My DocumentsC:\test-backup 分开是怎么回事?为什么引号只在My Documents 附近?

    我假设这是一个错字,请尝试使用robocopy C:\Users\Angie "C:\test-backup\My Documents" /B /E /R:0 /CREATE /NP /TEE /XJ /LOG+:"CompleteBackupLog.txt"

    [编辑:] 由于文档中指定的语法 (robocopy <Source> <Destination> [<File>[ ...]]) 是 File,因此它可能不适用于 Folders

    你必须使用robocopy "C:\Users\Angie\My Documents" "C:\test-backup\My Documents" /B /E /R:0 /CREATE /NP /TEE /XJ /LOG+:"CompleteBackupLog.txt"

    【讨论】:

    • 根据technet 语法是'robocopy [[ ...]] []' 所以在我的情况下,我想复制我的文档文件夹。如果我使用您向我展示的代码,它不会将“C:\Users\Angie”中的 everything 复制到“C:\test-backup\My Documents”,而不仅仅是“我的文档”吗?
    • YatharthROCK:是的,我认为您的编辑是我必须要做的。很抱歉造成混乱,我希望我可以在命令中列出三个文件夹名称,而不是编写三个单独的命令...不过没关系,只要它有效 :o) 谢谢。
    • @Angie 你知道知道 Robocopy 是什么或它是关于什么的吗?我只从文档中略读了这些东西。还有链接,你提供给我了。有时你已经非常接近答案了,你只需要多搜索一点:)
    【解决方案4】:

    robocopy 在解释源名称时存在错误。如果您在路径末尾包含一个反斜杠来描述一个文件夹,它会一直将源的字符串包含在该行的其余部分中。即

    robocopy "C:\back up\" %destination% /e 此处没有任何内容会转到目标字符串

    robocopy "C:\back up" %destination% /e 但这可行

    我可能错了,但我认为两者都应该有效!

    【讨论】:

      【解决方案5】:
      robocopy "C:\Users\Angie\My Documents" "C:\test-backup\My Documents" /B /E /R:0 /CREATE /NP /TEE /XJ /LOG+:"CompleteBackupLog.txt"
      robocopy "C:\Users\Angie\My Music" "C:\test-backup\My Music" /B /E /R:0 /CREATE /NP /TEE /XJ /LOG+:"CompleteBackupLog.txt"
      robocopy "C:\Users\Angie\My Pictures" "C:\test-backup\My Pictures" /B /E /R:0 /CREATE /NP /TEE /XJ /LOG+:"CompleteBackupLog.txt"
      

      【讨论】:

      • 不会复制'C:\Users\Angie' 中的所有内容 并将其放在'C:\test-backup\My Documents' 中吗?我只想复制上面提到的三个文件夹,并认为我可以在命令中列出它们。 'robocopy [[ ...]] []'
      【解决方案6】:

      当您指定路径上的最后一个目录时,删除最后一个。

      例如“\server\directory with space\directory with space”。

      应该这样做。

      【讨论】:

        【解决方案7】:

        如果此文件夹是命令中的第一个文件夹,则文件夹名称中的空格将无法使用,因此请将文件夹名称中的空格替换为下划线。

        【讨论】:

        • 不是直接答案,但仍然是可以解决问题的建议
        • Rename 'My Documents' to 'My_Documents' 真的 是一个有用的建议吗? Program Files呢?
        • 这是一种解决方法,而不是答案。考虑展示如何解决问题的示例。
        【解决方案8】:

        你应该只在路径之前写括号:"c:\program files\

        【讨论】:

          猜你喜欢
          • 2016-02-27
          • 2019-03-19
          • 2019-04-02
          • 2013-08-21
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2019-04-10
          相关资源
          最近更新 更多