1

我在 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

为了确保 mr 不是问题,我跑了,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 并且不运行命令(我必须退出命令行才能回到一个我在的地方)。

这里有什么问题?一个详细的解释会很棒。另外,我该如何解决这个问题?我更喜欢保留批处理文件的解决方案。

4

1 回答 1

3

echo 指令由正在运行的命令提示符实例直接执行。但是 perl 正在使用您的命令启动一个新进程。您需要在 cmd 实例中运行脚本,这些命令才能正常工作。

cmd /c必须工作。检查您提供给它的路径中是否有空格。您可以使用参数化的方式传递参数,

@array = qw("/c", "path/to/xyz.bat");
system("cmd.exe", @array);

echo 指令不是可执行文件,因此会出错。copy命令也是如此。它不是可执行文件,而xcopy.exe它是。

于 2013-01-31T09:24:33.927 回答