【问题标题】:Robocopy "invalid parameter" in shell scriptshell脚本中的Robocopy“无效参数”
【发布时间】:2018-06-01 06:16:07
【问题描述】:

我正在尝试使用 robocopy 将文件移动到远程计算机。这是通过在 Git Bash 中执行的文件 script.sh 在 Windows 机器上完成的。

背景

首先我使用net use添加共享目录:

NET USE \\\\$DEPLOY_SERVER\\$DEPLOY_SHARE /user:$DEPLOY_SERVER\\$DEPLOY_USER $DEPLOY_PASS

这很好用。

问题

那我去复制robocopy的文件:

robocopy . \\\\$DEPLOY_SERVER\\$DEPLOY_SHARE\\$DEPLOY_DIR /MIR

失败,错误代码 16

the robocopy docs,16 是Serious error. Robocopy did not copy any files.Either a usage error or an error due to insufficient access privileges on the source or destination directories.

在没有/MIR 的情况下运行它可以正常工作,没有错误。

错误日志

使用/MIR 运行时出现错误:

-------------------------------------------------------------------------------
ROBOCOPY     ::     Robust File Copy for Windows
-------------------------------------------------------------------------------    
Started : Mon Dec 18 15:46:26 2017    
Source - C:\<path to current dir>\
 Dest - \\<deploy server>\<deploy share>\<deploy dir>\    
Files :
Options : /COPY:DAT /R:1000000 /W:30    
------------------------------------------------------------------------------    
ERROR : Invalid Parameter #3 : "C:/Users/<my user>/AppData/Local/Programs/Git/MIR"    
   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 !

更多错误说明

任何选项都会出现这种情况,而不仅仅是/MIR,这只是最简单的错误形式。

我已经阅读了许多与此非常相似的问题,常见的答案是将路径放在双引号中以防有空格。我的路径没有空格,但我也尝试过并且遇到了同样的错误。此外,这会导致 robocopy 输出中的“源”和“目标”路径不正确,但它们对我来说是正确的。

我不知道我为什么要去git 目录并寻找MIR,或者为什么它不只是正确解析选项。另外我检查了MIRC:/Users/&lt;my user&gt;/AppData/Local/Programs/Git/中不存在。

研究

其他类似但对我没有帮助的问题:

结论

任何帮助将不胜感激!我也愿意使用robocopy以外的其他东西,但它需要与远程机器一起工作,可以从shell脚本运行,支持镜像,并且不使用sshnet use非常适合robocopy其他类似的东西)。

【问题讨论】:

  • shell 标签(和“shell 脚本”措辞)通常不用于关于 Windows 的问题——正如描述所说,包含该标签的问题通常是关于类 UNIX 操作系统上的 POSIX 系列 shell系统。也许您应该标记cmdpowershell(视情况而定)? (或者如果这是在 Cygwin 或 msys bash 中运行,请明确指定)。
  • @CharlesDuffy 谢谢!我将它添加到顶部,这是在 Windows 机器上,但它在 Git Bash 或使用 sh.exe 中运行。
  • 这两个中的哪一个?即使/bin/sh 与 Git Bash 在同一个二进制文件中,它在以该名称启动时以 POSIX 模式运行,因此它是一个不同的功能集。
  • @CharlesDuffy 无论哪种方式都会发生错误,但是对于我要使用 Git Bash 的问题,问题已相应更新
  • 如果您运行bash -x yourscript,输出是否与您的预期大不相同? (例如,如果日志显示它传递的是 $'/MIR\r' 而不是 /MIR,那么这就是预期会导致此问题的那种差异的示例 - 并暗示您的脚本是使用 DOS 换行符而不是UNIX 的;顺便提一下,这实际上是bash tag wiki“询问有问题的代码之前”部分中所说的第一件事)。

标签: shell remote-access git-bash remote-server robocopy


【解决方案1】:

我通过使用额外的正斜杠转义 /MIR 参数使其工作:

robocopy "C:\source" "C:\destination" //MIR

希望这会有所帮助;)

【讨论】:

    【解决方案2】:

    当需要管理员 privileges/ 或 pop 创建文件到该目录时会发生这种情况

    所以尝试创建一个log/temp 目录并尝试将log 文件添加到该log 目录中

    mkdir log\
    e.g: robocopy . \\\\$DEPLOY_SERVER\\$DEPLOY_SHARE\\$DEPLOY_DIR 
    /log:"\\$ServerShare\log\copy_log.log"
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-11-18
      相关资源
      最近更新 更多