在Windows中使用Activestate Perl运行批处理文件

3
我有一个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,但批处理文件实际上并没有执行。这是什么原因?上面编码的 'system' 调用有什么问题吗?
谢谢, Jits
4个回答

1

你确定批处理文件没有运行吗?我已经拿了你的代码,在我的机器上修复了不存在的路径。我让它调用了批处理文件。

echo In myrun  1=%1  2=%2

它将以下内容写入输出文件

 In myrun  1="\\Server\share\folder1"  2="D:\output\folder1"

1

在双引号内,你需要转义反斜杠。

my $exe = "C:\\project\\set_env_and_run.bat";
...
my $status = system("$cmd > c:\\tmp\\out.txt 2>&1");

抱歉,我已经放置了示例代码,但是忘记转义反斜杠!我已经在上面进行了更正。 - Jithesh
在Win32 Perl中,您可以在文件路径中使用正斜杠。例如:my $exe = 'C:/project/set_env_and_run.bat'; 这样做非常好。 - daotoad

1
我会这样翻译:

我认为你应该像这样定义exe:

my $exe = "cmd.exe /c C:\\project\\set_env_and_run.bat";

1
你可以使用 <\p>。
 system ("start C:\\project\\set_env_and_run.bat");

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接