如何复制名称中带有空格的目录

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 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\

【讨论】:

以上是关于如何复制名称中带有空格的目录的主要内容,如果未能解决你的问题,请参考以下文章

将 URL 回显到网络驱动器上名称中带有空格的文件

如何在 python 中导入名称中带有空格的文件?

反应,渲染名称中带有空格的图像的问题

名称中带有空格的 SQLite 列

Git添加一个名称中带有空格的文件夹

获取名称中带有空格的频道的统计信息