2010-05-25 85 views
3

我有一個Perl程序,它做類似下面:運行在Perl的批處理文件(ActiveState的Perl的Windows環境)

#!/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的狀態,但批處理文件並未實際執行。這是什麼原因?上面編碼的「系統」調用的任何問題?

感謝, JITS

回答

1

你需要逃避雙引號內的反斜槓。

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

對不起,我把樣品c頌歌並錯過了反斜槓!已經在上面糾正了它。 – Jithesh 2010-05-25 19:08:56

+0

你可以在Win32的perl文件路徑中使用正確的(正向)斜線? '我的$ exe ='C:/project/set_env_and_run.bat';'會很好地工作。 – daotoad 2010-05-25 20:08:35

1

您確定bat文件沒有運行。我已經拿走了您的代碼,修復了我的機器上不存在的路徑。我得到它來調用批處理文件

echo In myrun 1=%1 2=%2 

,並將其寫入以下輸出文件

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

我要說的是,你應該定義EXE這樣的:

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

你可以使用

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