Запуск пакетного файла из 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");