[英]“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.