Запуск пакетного файла из Perl (Activestate Perl в Windows) - PullRequest
3 голосов
/ 25 мая 2010

У меня есть программа 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, но пакетный файл фактически не выполнялся. Что было бы причиной этого? Любая проблема с системным вызовом, закодированным выше?

Спасибо, Jits

Ответы [ 4 ]

1 голос
/ 26 мая 2010

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

echo In myrun  1=%1  2=%2

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

 In myrun  1="\\Server\share\folder1"  2="D:\output\folder1"
1 голос
/ 12 мая 2013

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

my $exe = "cmd.exe /c C:\\project\\set_env_and_run.bat";
1 голос
/ 25 мая 2010

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

my $exe = "C:\\project\\set_env_and_run.bat";
...
my $status = system("$cmd > c:\\tmp\\out.txt 2>&1");
0 голосов
/ 22 июля 2014

вы можете использовать

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