我在Windows上使用mr,它允许在任何存储库操作之前/之后运行任意命令。据我所知,只需调用perl的system
函数即可完成。但是我的设置似乎有些不对劲:当mr运行以下批处理文件时,位于d:
@echo off
copy /Y foo.bat bar.bat
我在最基本的Windows命令上遇到错误:
d:/foo.bat: line 1: @echo: command not found
d:/foo.bat: line 2: copy: command not found
为了确保先生不是问题,我跑了perl -e 'system( "d:/foo.bat" )'
,但输出是一样的。
使用xcopy而不是copy,似乎找到xcopy命令,因为输出现在是
d:/foo.bat: line 1: @echo: command not found
Invalid number of parameters
但是我不知道参数有什么问题。我想可能问题是批处理文件没有完全访问标准命令环境,所以我尝试通过perl -e 'system( "cmd /c d:\foo.bat" )'
显式运行它,但这只是启动cmd并且不运行命令(我必须退出命令行)回到我所在的那个。)
这里有什么问题?详细解释会很棒。另外,我该如何解决这个问题?我更喜欢一个让批处理文件保持原样的解决方案。
答案 0 :(得分:3)
echo指令由正在运行的命令提示符实例直接执行。 但是你的命令perl是 launching a new process 。您需要在cmd实例中运行脚本,以使这些命令起作用。
您的cmd /c
必须有效。检查您提供给它的路径中是否有空格。
您可以使用参数化的方式传递参数,
@array = qw("/c", "path/to/xyz.bat");
system("cmd.exe", @array);
echo指令不是可执行文件,因此它出错了。
copy
命令也是如此。它是不可执行文件,而xcopy.exe
是。