Запуск пакетного файла из Perl (Activestate Perl в Windows)

У меня есть программа 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";

Я называю этот код Perl в блоке eval. Когда вызвано, я получаю статус, напечатанный как 0, но пакетный файл фактически не выполнялся. Что было бы причиной этого? Любая проблема с системным вызовом, закодированным выше?

Спасибо джитс

4 ответа

Вы должны избежать обратной косой черты внутри двойных кавычек.

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

Я бы сказал, что вы должны определить exe следующим образом:

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

Вы уверены, что файл bat не запущен? Я взял ваш код, исправил пути, которых нет на моей машине. Я получаю это для вызова командного файла

echo In myrun  1=%1  2=%2

И он пишет следующее в выходной файл

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

Вы могли бы использовать

 system ("start C:\\project\\set_env_and_run.bat");
Другие вопросы по тегам