2015-08-31 97 views
0

我正在運行perl腳本,後者又調用批處理腳本。我需要將3個參數傳遞給批處理腳本。我傳遞參數,因爲它更容易在Perl腳本中讀取文件&捕獲所需的值。但是,我的腳本錯誤地顯示錯誤 - 「系統找不到指定的路徑。」

我使用下面的代碼 -
需要將變量傳遞給來自perl腳本的批處理腳本

while (<FILE>) 
{ 
    ($file, $rcc, $loc) = split(','); 
    my @lines = qx/"D:\\SiebelAdmin\\Commands\\WinFile_Move.bat $file $rcc $loc" /; 
} 
+0

看起來你的參數是不是你所期望的。文件中可能存在空行? – Jens

+0

我通過打印值檢查了參數。值如期 - file = XLNXlogin.css rcc = $/Compass/CodeFreeze/SIEBEL/2015_NOV/NGCM-II/ServerFiles/CSS, loc = D:\ sba81 \ SWEApp \ PUBLIC \ enu \ files \ custom
文件名,目錄名稱或卷標語法不正確。 – parthodas

回答

0

刪除雙引號。有了它們,系統將整條線解釋爲命令,而不是帶參數的命令。

my @lines = qx/D:\\SiebelAdmin\\Commands\\WinFile_Move.bat $file $rcc $loc/; 
+0

刪除雙引號後,我得到解析錯誤。沒有其他錯誤。 file=XLNXlogin.css rcc=$/Compass/CodeFreeze/SIEBEL/2015_NOV/NGCM-II/ServerFiles/CSS loc=D:\sba81\SWEApp\PUBLIC\enu\files\custom Parse Error Parse Error parthodas

+0

@parthodas:你能用給定的參數從命令行運行命令嗎? – choroba

0

請檢查是否適合您。 我已經創建了帶有兩個參數並在提示符上打印的樣本批處理腳本。 此腳本位置在桌面上。批處理腳本的

代碼

@echo off 
set arg1=%1 
set arg2=%2 
shift 
shift 

echo %arg1% 
echo %arg2% 

批處理腳本

C:\Users\Administrator\Desktop>a.bat perl5.8 perl5.18 
perl5.8 
perl5.18 
C:\Users\Administrator\Desktop> 

的輸出現在我已經創建了Perl腳本調用該批處理腳本。這個perl腳本存在於C盤中。

代碼perl腳本輸出Perl腳本的

my $bat_file = 'C:\Users\Administrator\Desktop\a.bat'; 
my $arg1 = 'perl5.8'; 
my $arg2 = 'perl5.18'; 
my @lines = `$bat_file $arg1 $arg2`; 
print @lines; 

C:\>perl tmp.pl 
perl5.8 
perl5.18 
+0

當在我的本地機器上嘗試你的代碼時,它工作正常。然後,我嘗試在我的腳本中執行相同的修改。但是,我又得到了同樣的分析錯誤。 'my $ bat_file ='D:\\ SiebelAdmin \\ Commands \\ WinFile_Move.bat'; \t \t my $ mydir ='D:\ SiebelAdmin \ CR_Files \ CR117365_20150831_0254 \ CSS'; \t \t my $ file ='XLNXlogin.css'; \t \t my $ loc ='D:\ SiebelAdmin \ Commands \ WinFile_Move。蝙蝠'; \t \t printf「file = $ file \ nmydir = $ mydir \ nloc = $ loc \ n $ bat_file \ n」; \t \t my @lines = \'$ bat_file $ mydir $ file $ loc \';' – parthodas

+0

@parthodas - 您能複製整個錯誤字符串併發布嗎?試圖瞭解哪些錯誤 - perl腳本或批處理腳本?此外,您上面發佈的代碼顯示'$ bat_file'和'$ loc'指的是同一個文件。這是否正確? –

+0

感謝您的幫助。發現錯誤。 Perl腳本很好。批處理腳本發出錯誤。從批處理腳本中刪除了一些參數聲明,現在Parse Error消失了。現在錯誤已經改變。我已經檢查了PATH的環境變量,並且設置正確。如果您想查看批處理腳本,請告訴我。它現在正在投擲 - 'findstr'不被識別爲內部或外部命令,可操作程序或批處理文件。 – parthodas

0

你可以這樣做:

的Perl文件:

my $arg = "hey"; 
my $bat_file_loc = "C:\\abc.bat"; 
system($bat_file_loc,$arg); 

批處理文件:

set arg1=%1