[英]“invalid path 0 files copied” Error while using xcopy command
嗨,我有这个小命令可以批量复制文件,这将有所帮助,因为我每天多次执行此特定复制。 使用 xcopy 命令时出现问题。 一切正常,但我收到此错误:“复制的路径 0 文件无效”。 这是代码:
C:\Windows\System32\xcopy /Y "C:\Users\Ryan\Desktop\mmars_pub\" "C:\Users\Ryan\Desktop\Dropbox\MMARS\mmars_pub\"
我正在使用 xcopy 可执行文件的完整路径,因为我在配置路径环境变量以使其正常运行时遇到问题。 我认为它不应该影响结果。 我在某处阅读了有关“防止基于 MS-DOS 的程序检测 Windows”复选框的内容,该复选框应该可以解决该问题,但我似乎无法找到它。 任何帮助表示赞赏。
原答案
从源文件夹路径中删除结尾反斜杠
C:\Windows\System32\xcopy.exe /Y "C:\Users\Ryan\Desktop\mmars_pub" "C:\Users\Ryan\Desktop\Dropbox\MMARS\mmars_pub\"
编辑2015/10/01
虽然原始问题使用了文字路径,并且指示的解决方案将解决问题,但还有另一种选择。 对于文字路径以及路径在变量内部并且可以(或不)以反斜杠结尾的情况,确保结尾反斜杠(如果存在)与引号(包括结尾点)分开就足够了。
xcopy /y "x:\source\." "x:\target"
xcopy /y "%myVariable%." "x:\target"
此结束点不会干扰文件/文件夹名称。 如果有并结束反斜杠,附加的点将只是指同一个文件夹。 如果没有结尾反斜杠,如 Windows 文件和文件夹不能以点结尾,它将被丢弃。
但是如果xcopy
命令的输出将被处理,请记住这个额外的点将包含在显示的路径中。
注意:解决方案是在线的。 如果对为什么/哪里有问题感兴趣,请继续阅读。
为什么xcopy "c:\\source\\" "d:\\target\\"
失败但xcopy "c:\\source" "d:\\target\\"
有效?
这两个命令似乎都有有效的路径引用,并且...是的! 两者都是有效的路径引用,但有两个元素共同作用使命令失败:
xcopy
不是cmd
处理的内部命令,而是一个可执行文件由于xcopy
是一个外部命令,它的参数不会按照cmd
解析器命令行逻辑进行处理。 它们由Microsoft C 启动代码处理。
这个解析器遵循两套规则,官方规则
参数由空格分隔,空格或制表符。
被双引号包围的字符串被解释为单个参数,而不管其中包含的空格。 带引号的字符串可以嵌入到参数中。 请注意,插入符号 (
^
) 不被识别为转义字符或分隔符。以反斜杠
\\"
开头的双引号被解释为文字双引号 ("
)。反斜杠按字面解释,除非它们紧跟在双引号之前。
如果反斜线偶数后跟一个双引号,则一个反斜杠(
\\
)放置在argv数组中每对反斜杠(的\\\\
)和双引号("
)被解释为字符串分隔符.如果反斜线奇数后跟一个双引号,则一个反斜杠(
\\
)放置在argv数组中每对反斜杠(的\\\\
)和双引号由其余反斜杠解释为转义序列,导致在 argv 中放置一个文字双引号 ("
)。
和未记录/非官方规则( 如何解析命令行参数)
- 在双引号块之外,
"
开始一个双引号块。- 在双引号块内,一个
"
后跟一个不同的字符(不是另一个"
)结束双引号块。- 在双引号块中,一个
"
紧跟另一个"
(即""
)会导致将单个"
添加到输出中,并且双引号块继续。
此解析器将“第一个”参数末尾的序列\\"
视为不结束/关闭参数的转义引号,它被视为部分或参数。以及“第二个”的“起始”引号参数只是结束双引号块但不结束参数,请记住参数由空格分隔。
所以虽然命令行参数似乎是
v v v......argument delimiters
v.........v v..........v ......quoted blocks
xcopy "x:\souce\" "x:\target\"
^.......^ ^........^ ......argument data
arg #1 arg #2
arg #1 = x:\source\
arg #2 = x:\target\
xcopy
处理的实际参数是
v v .....argument delimiters
v......................v .....quoted block
xcopy "x:\souce\" "x:\target\"
^.....................^ .....argument data
arg #1
arg #1 = x:\source" x:\target"
当结束反斜杠被移除或包含额外的点时,参数中的结束引号将不会被转义,它将关闭被引用的块,并且参数之间的空格将被视为分隔符。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.