2016-09-18 58 views
1

當我使用robocopy複製文件並使用選項/IS覆蓋(如果已存在於目標)。它將該選項視爲另一個文件,如日誌所示:ERROR : Invalid Parameter #4 : "C:/Program Files/Git/IS"robocopy將選項視爲文件

任何人都知道如何在覆蓋目標文件的同時在Windows中複製文件。

$ robocopy "Z:\ubuntushare" "C:\Natlink\Natlink\MacroSystem" "_git.py" /IS 

    ROBOCOPY  ::  Robust File Copy for Windows 

    Started : Sat Sep 17 18:00:05 2016 

    Source - Z:\ubuntushare\ 
    Dest - C:\Natlink\Natlink\MacroSystem\ 

    Files : _git.py 

    Options : /COPY:DAT /R:1000000 /W:30 

------------------------------------------------------------------------------ 

ERROR : Invalid Parameter #4 : "C:/Program Files/Git/IS" 

     Simple Usage :: ROBOCOPY source destination /MIR 

      source :: Source Directory (drive:\path or \\server\share\path). 
     destination :: Destination Dir (drive:\path or \\server\share\path). 
       /MIR :: Mirror a complete directory tree. 

    For more usage information run ROBOCOPY /? 


**** /MIR can DELETE files as well as copy them ! 

[email protected] MINGW64 /c/NatLink/NatLink/MacroSystem 

回答

2

ROBOCOPY使用windows風格的正斜槓/來指定命令行選項。這對於Git-bash或類似的終端來說並不合適,因爲斜槓在Linux和類似環境中被解釋爲root路徑。

Shell正在將/something解釋爲根文件夾C:\Program Files\Git\下的文件something,而不是命令行選項。因此,這意味着"C:\Program Files\Git\something"不存在。

即使嘗試使用幫助選項/?也會失敗,並顯示類似錯誤。

使用linux/unix/mac標準-opt而不是/opt Robocopy允許使用破折號/連字符-指定選項。例如robocopy -?工作並顯示使用情況信息/幫助。所以做:

robocopy "Z:\ubuntushare" "C:\Natlink\Natlink\MacroSystem" "_git.py" -IS 
+2

這取決於一個事實,即正斜槓增加一倍儘管robocopy接受'-'而不是'/'。當然有更通用的方法來告訴shell不要混淆命令行? –

+0

@HarryJohnston +1不知道Robocopy明確允許它,因此工作。將編輯我的答案。所以我認爲所有使用'/ opts'的windows命令都會導致這個錯誤?發現令人驚訝的是用'\ /'轉義'''也沒有效果。 – aneroid

3

編輯 2016年9月19日 - 經過測試,它的工作原理

MinGW Posix path conversion

開始2個或更多的參數被視爲/轉義的Windows 樣式開關,並將通過前導/移除和所有\ 更改爲/。

  • 除了如果有/ /的前導塊以下,參數被認爲是UNC路徑和前/不 除去。

:這只是一個小完整列表的提取物。這是更好地閱讀完整列表窗口與混帳bash shell的工作

因此,在這種情況下,解決的辦法是在交換機

robocopy "Z:\ubuntushare" "C:\Natlink\Natlink\MacroSystem" "_git.py" //IS 
+0

哇。其中一些規則是*奇怪的。* –

+0

@哈里約翰斯頓,我必須同意,但我也很高興有人想到兩個系統的共存 –