如何复制名称中带有空格的目录
Posted
技术标签:
【中文标题】如何复制名称中带有空格的目录【英文标题】: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"
无论我做什么,它都不会发生。有人有什么建议或技巧吗?
【问题讨论】:
【参考方案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 Documents
与C:\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 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\
【讨论】:
以上是关于如何复制名称中带有空格的目录的主要内容,如果未能解决你的问题,请参考以下文章