Running a batch file from Perl (Activestate perl in Windows)

时光总嘲笑我的痴心妄想 提交于 2019-12-12 09:55:04

问题


I have a Perl program which does something like below:

#!/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";

I am calling this Perl code in an eval block. When invoked, i get the status printed as 0, but the batch file has not actually executed. What would be the reason for this? Any issue with the 'system' call coded above?

Thanks, Jits


回答1:


You need to escape your backslashes inside of double quotes.

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



回答2:


Are you sure the bat file isn't running. I have taken your code, fixed up the paths that don't exist on my machine. I get it to call the batch file

echo In myrun  1=%1  2=%2

And it writes the following to the output file

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



回答3:


I would say that you should define exe like this:

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



回答4:


you could use

 system ("start C:\\project\\set_env_and_run.bat");


来源:https://stackoverflow.com/questions/2907494/running-a-batch-file-from-perl-activestate-perl-in-windows

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!