Perl运行批处理文件@echo命令未找到

时间:2013-01-31 09:20:29

标签: perl command-line batch-file

我在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并且不运行命令(我必须退出命令行)回到我所在的那个。)

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

1 个答案:

答案 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是。