5

我无法让它工作

call "%MSDeployPath%msdeploy" -verb:sync -source:runCommand='backup.bat param1' -dest:auto,computername=10.xx.xx.xx,username=xxx,password=yyy

它给了我:

警告:'backup.bat' 不是内部或外部命令、可运行程序或批处理文件。

警告:进程“C:\Windows\system32\cmd.exe”(命令行“”)退出,代码为“0x1”。更改总数:1(添加 0 个,删除 0 个,更新 1 个,更改 0 个参数,复制 0 个字节)

如果我删除 param1 并将其硬编码在 .bat 中,它可以工作,因此 bat 文件没有问题,以防万一。

我试图指定 .bat 的完整路径,但它仍然不起作用:

call "%MSDeployPath%msdeploy" -verb:sync -source:runCommand='c:\backup.bat param1' -dest:auto,computername=10.xx.xx.xx,username=xxx,password=yyy

在这种情况下,它看起来像是将路径解释为远程路径,它希望 backup.bat 在服务器上。我在服务器上移动了 backup.bat 后向我确认了这一点,它起作用了

为什么一定要这么难???

4

1 回答 1

7

编辑你是对的,文档指出cmd/bat 文件将被流式传输到目的地。

在我看来,这只是它不能接受参数的功能的限制。在部署时使用硬编码的设置创建批处理文件的修改版本应该不会太难。

就像是:

REM Start of prepended script
SET SCRIPT_USERNAME=ThatGuy
REM End of prepended script

IF ("%SCRIPT_USERNAME%" == "") SET SCRIPT_USERNAME=%1

更新浏览了 msdeploy 的反射源 (ahem),我可以确认它只是当前设计的方式。它根据整个路径是否代表一个文件来确定是否上传文件。由于添加参数会阻止它解析文件的路径,因此它不会上传任何内容。

于 2012-10-04T11:46:38.123 回答