robocopy将选项视为文件

Pri*_*esh 5 windows shell batch-file robocopy git-bash

当我使用robocopy复制文件并使用选项/IS进行覆盖(如果目标位置已经存在)。如日志所示,它将选项视为另一个文件:ERROR : Invalid Parameter #4 : "C:/Program Files/Git/IS"

任何人都知道在覆盖目标文件时如何在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 !

pri@pri-PC MINGW64 /c/NatLink/NatLink/MacroSystem
Run Code Online (Sandbox Code Playgroud)

MC *_* ND 7

2016/09/19 编辑 -经过测试,可以正常工作

MinGW Posix路径转换

以2或更大的/开头的参数被认为是Windows样式的转义参数,将以前导/删除且所有\更改为/传递。

  • 除非在/的前导块之后有/,否则该参数被视为UNC路径,并且不删除前导/。

注意:这只是完整列表的一部分。最好在Windows中使用git bash shell时阅读完整列表

因此,在这种情况下,解决方案是将交换机中的正斜杠加倍

robocopy "Z:\ubuntushare" "C:\Natlink\Natlink\MacroSystem" "_git.py" //IS
Run Code Online (Sandbox Code Playgroud)


ane*_*oid 4

ROBOCOPY 使用 Windows 风格的正斜杠/来指定命令行选项。这不适用于 Git-bash 或类似的终端,因为斜杠root在 Linux 和类似环境中被解释为路径。

shell 将 解释为根文件夹下的/something文件,而不是命令行选项。所以这最终导致了不存在的意义。somethingC:\Program Files\Git\"C:\Program Files\Git\something"

即使尝试使用帮助选项/?也会失败并出现类似的错误。

使用 linux/unix/mac 标准-opt而不是/opt.Robocopy 允许使用破折号/连字符-来指定选项。例如robocopy -?工作并显示使用信息/帮助。所以这样做:

robocopy "Z:\ubuntushare" "C:\Natlink\Natlink\MacroSystem" "_git.py" -IS
Run Code Online (Sandbox Code Playgroud)

  • 这取决于 robocopy 接受 `-` 而不是 `/` 的事实。当然有一种更通用的方法来告诉 shell 不要扰乱命令行吗? (2认同)