为什么robocopy使用自己的命令行解析器?

时间:2015-02-09 15:52:32

标签: robocopy

如果我在Windows 8.1计算机上执行以下命令:

robocopy "C:\Temp\A\" "C:\Temp\B\"

由于以下问题导致Robocopy失败:

Source : C:\Temp\A" C:\Temp\B"\
Dest -

...

ERROR : No Destination Directory Specified.

看起来\被用作某种转义字符(在Windows命令行中不是正常行为)最终的\"甚至被转换为"\我做的根本不明白。为什么会这样?

注意:这不是命令行的默认行为,如果他们在robocopy中使用了argv[1]argv[2],他们就会检索到正确的参数。

为什么他们使用自己的命令行解析?在最后一小时,我真的很困惑......

2 个答案:

答案 0 :(得分:0)

您应该省略尾部反斜杠。

来自http://ss64.com/nt/robocopy.html

  

如果来源或目的地是“引用长的foldername”,那么   不包括尾部反斜杠,因为这将被视为转义   字符,即“C:\ some path \”将失败,但“C:\ some path \\”或   “C:\有些道路。”或“C:\ some path”将起作用。

答案 1 :(得分:0)

robocopy也不例外。任何可执行文件都使用自己的行解析器来确定发送给它的参数。操作系统只是使用API​​来创建进程并向其传递一个要作为参数处理的字符串。该进程可以根据需要处理字符串。

robocopy的情况下,使用的解析器是标准的Microsoft C启动代码。此解析器遵循here描述的规则,并在完整列表中找到

  

以反斜杠开头的双引号,",被解释为   文字双引号(")。