如何复制文件夹名称带有空格的目录

42
我正在尝试使用robocopy进行复制,但由于目录名称中有空格,无法使其正常工作。我要复制三个文件夹:我的文档、我的音乐和我的图片到“C:\test-backup”,但希望最终结果是'C:\test-backup\My Documents','C:\test-backup\My Music'和'C:\test-backup\My Pictures'。我的命令不起作用。
建议您将命令更改为:robocopy "C:\Users\Angie\My Documents" "C:\test-backup\My Documents" /B /E /R:0 /CREATE /NP /TEE /XJ /LOG+:"CompleteBackupLog.txt",然后依此类推分别复制其他两个文件夹。
8个回答

128

经过一些试错和观察结果(也就是说,我把它给“黑进去”了),我让它成功运行了。

使用带有空格的路径名必须要加引号。诀窍在于在路径名称后面必须要有一个空格,在结束引号之前...像这样...

robocopy "C:\Source Path " "C:\Destination Path " /option1 /option2...
这似乎几乎是一个漏洞,肯定不太直观。 Todd K.

10
感谢您的询问。为了更加清晰明了,原文中的意思是在引号结束前有一个空格:"C:\source path\ "。 - th3byrdm4n
6
哇,这个要求太不直观了!谢谢你,托德! - Shannon Matthews
3
我在另一个答案中看到了原因——最后一个反斜杠被视为转义字符,所以我不确定你的例子是否适用于这个“闭引号后空格”的要求?无论如何,感谢您提醒我这个奇怪的问题(我不是OP,只是路过的人)。毫无疑问,这似乎仍然是一个错误,而不是其他什么,否则Robocopy就真的很愚蠢了。毕竟,它并没有被第一个“转义”的引号所困惑。 - dyasta
1
不太可能是一个 bug,但绝对是一个 bug,而且还没有文档记录!对于那些关心 Java 中 "mir option" 调用的人: "ROBOCOPY " + """ + srcpath.replace("/", "\") + " "" + " ""+ targetpath.replace("/", "\") + " "" + " /MIR" - fl0w
只是一个提醒,这些问题是由CMD shell解析器引起的,而不是robocopy。他们永远不会修复它们,我认为我们应该转向PowerShell。 - Ben McIntyre
显示剩余3条评论

44

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

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

但是,以下内容将不起作用:

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

这是由于逸出问题所导致的,有关描述可以在此处找到:

使用 \ 转义符可能会导致问题,尤其是当引号包含具有尾部反斜杠的目录路径时,因为行末的引号 " 将被转义为 \"。


3
感谢您提供了这种行为背后的上下文细节。现在它有些意义了,尽管可能仍然不直观。他们肯定可以/应该通过编程做得更好。在大多数情况下,我们很容易假设其意图。毕竟,它并没有被第一个“转义”的引号所困扰。 - dyasta
1
这个帮我省了不少命令行的烦恼。谢谢你的分享! - sheldonhull
非常好的解释。与toddk63的答案相比,这真正解释了为什么两种可能性都有效。喜欢使用尾部反斜杠来澄清这是一个文件夹的人需要额外的空格,因为robocopy在双引号之前将其作为转义字符捕获。如果省略尾部反斜杠,则不再需要空格。 - MichaelHuelsen

14
为什么要将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>[...]])中说到 文件,所以它可能无法处理文件夹
您必须使用robocopy "C:\Users\Angie\My Documents" "C:\test-backup\My Documents" /B /E /R:0 /CREATE /NP /TEE /XJ /LOG+:"CompleteBackupLog.txt"

根据[technet](http://technet.microsoft.com/en-us/library/cc733145%28WS.10%29.aspx),语法为“ robocopy <Source> <Destination> [<File> [ ...]] [<Options>]”,所以在我的情况下,我想要复制“我的文档”文件夹。如果我使用你展示给我的代码,它不会复制'C:\ Users \ Angie'中的所有内容到'C:\ test-backup \ My Documents'而不仅是“我的文档”吗? - Angie
YatharthROCK:是的,我认为您的编辑就是我必须要做的。对于混淆感到抱歉,我本来希望可以在命令中列出三个文件夹名称,而不是编写三个单独的命令...但没关系,只要它能正常工作: o)谢谢。 - Angie
1
@Angie 你知道我完全不知道Robocopy是什么或者它是关于什么的吗?我只是从文档中大致浏览了一下。还有你提供给我的链接。有时候你离答案很近,只需要再搜索一下 :) - Yatharth Agarwal

8

robocopy 在解释源文件名时存在一个漏洞。如果您在路径末尾包含反斜杠以描述文件夹,则会将源字符串包括到其余行中。例如:

robocopy "C:\back up\" %destination% /e 这里的所有内容都不会传送到目标字符串

robocopy "C:\back up" %destination% /e 这个则可以正常工作

我可能错了,但我认为这两个命令都应该可以工作!


2
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 <源> <目的地> [<文件>[ ...]] [<选项>]' - Angie

1
当您指定路径上的最后一个目录时,请删除最后一个“.”。
例如 "\server\directory with space\directory with space"。
就应该可以了。

-3

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


-4
如果这个文件夹是命令中的第一个,则文件夹名称中有空格时将无法正常工作,因此请使用下划线替换文件夹名称中的空格。

2
不是直接的答案,但仍然是一个能解决问题的建议。 - Elzo Valugi
3
“将'My Documents'重命名为'My_Documents'”真的是一个有用的建议吗?那么“Program Files”呢? - Jay Sullivan
1
这只是一个解决方法,而不是答案。考虑展示如何修复问题的示例。 - Nick Vence

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接