2016-09-18 22 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

@哈里约翰斯顿,我必须同意,但我也很高兴有人想到两个系统的共存 –