我有一个Perl程序,它执行如下操作:
#!/usr/bin/env perl
use strict;
use warnings;
my $exe = "C:\\project\\set_env_and_run.bat";
my $arg1 = "\\\\Server\\share\\folder1";
my $arg2 = "D:\\output\\folder1";
my $cmd = "$exe \"$arg1\" \"$arg2\"";
my $status = system("$cmd > c:\\tmp\\out.txt 2>&1");
print "$status\n";
我在eval块中调用此Perl代码。调用时,我将状态打印为0,但批处理文件尚未实际执行。这是什么原因?上面编码的“系统”调用有什么问题吗?
谢谢, JITS
答案 0 :(得分:1)
你需要在双引号内转义反斜杠。
my $exe = "C:\\project\\set_env_and_run.bat";
...
my $status = system("$cmd > c:\\tmp\\out.txt 2>&1");
答案 1 :(得分:1)
您确定bat文件未运行。我已经拿走了你的代码,修复了我机器上不存在的路径。我得到它来调用批处理文件
echo In myrun 1=%1 2=%2
它将以下内容写入输出文件
In myrun 1="\\Server\share\folder1" 2="D:\output\folder1"
答案 2 :(得分:1)
我会说你应该像这样定义exe:
my $exe = "cmd.exe /c C:\\project\\set_env_and_run.bat";
答案 3 :(得分:0)
你可以使用
system ("start C:\\project\\set_env_and_run.bat");