【发布时间】: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,或者为什么它不只是正确解析选项。另外我检查了MIR在C:/Users/<my user>/AppData/Local/Programs/Git/中不存在。
研究
其他类似但对我没有帮助的问题:
- invalid parameter in robocopy syntax
- Robocopy showing invalid parameter
- robocopy invalid parameter “-”
- Robocopy Invalid Parameter #7 Log
- https://www.experts-exchange.com/questions/22616754/Robocopy-Error-Invalid-Parameter-3.html
- robocopy says its receiving invalid parameters in when used in powershell script
- Robocopy - Invalid Parameter
- Robocopy invalid parameter #3
结论
任何帮助将不胜感激!我也愿意使用robocopy以外的其他东西,但它需要与远程机器一起工作,可以从shell脚本运行,支持镜像,并且不使用ssh(net use非常适合robocopy其他类似的东西)。
【问题讨论】:
-
shell 标签(和“shell 脚本”措辞)通常不用于关于 Windows 的问题——正如描述所说,包含该标签的问题通常是关于类 UNIX 操作系统上的 POSIX 系列 shell系统。也许您应该标记cmd 或powershell(视情况而定)? (或者如果这是在 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 的;顺便提一下,这实际上是bashtag wiki 在“询问有问题的代码之前”部分中所说的第一件事。)。
标签: shell remote-access git-bash remote-server robocopy