【问题标题】:robocopy treats options as filesrobocopy 将选项视为文件
【发布时间】:2017-01-25 23:04:38
【问题描述】:

当我使用 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

【问题讨论】:

    标签: windows shell batch-file git-bash robocopy


    【解决方案1】:

    已编辑 2016/09/19 - 已测试且有效

    来自MinGW Posix path conversion

    以 2 或更多 / 开头的参数被视为转义 Windows 样式开关,将通过前导 / 删除和所有 \ 改为/。

    • 除了如果/的前导块后面有/,则该参数被认为是UNC路径,而前导/不是 已删除。

    注意:这只是完整列表的摘录。在 windows 中使用 git bash shell 时最好阅读完整列表

    所以,在这种情况下,解决方案是在 switch 中将正斜杠加倍

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

    【讨论】:

    • 哇。其中一些规则是奇怪的。
    • @HarryJohnston,我不得不同意,但我也很高兴有人想到了两个系统的共存
    【解决方案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
    

    【讨论】:

    • 这取决于robocopy接受-而不是/这一事实。肯定有更通用的方法来告诉 shell 不要乱用命令行?
    • @HarryJohnston +1 不知道 Robocopy 明确允许它并因此工作。将编辑我的答案。所以我假设所有使用/opts 的Windows 命令都会导致这个错误?令人惊讶的是,用 \/ 转义 / 也不起作用。
    猜你喜欢
    • 2021-07-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-13
    • 2014-01-25
    • 2011-02-04
    相关资源
    最近更新 更多