2014-01-25 137 views
0

我在批處理文件errorlevel返回問題掙扎,並找不到答案。
任何人都可以給我任何提示嗎?批處理文件調用errorlevel兩次

我有一個外部二進制文件external.exe,它讀取批處理文件的返回碼(0-成功,其他失敗)以決定要做什麼。

在批處理文件mybatch.cmd中,我想運行腳本(perl)並將結果返回到批處理文件。

例如,mybatch.cmd

@echo off 
myperl.pl 
exit %errorlevel% 

雖然myperl.pl是:

#!perl.exe 
exit 0; 

,所以我想myperl.pl至0值返回到批處理文件,然後批處理文件將返回0到external.exe文件。

但external.exe沒有按預期工作。

1)如果我從CLI mybatch.cmd運行,然後在 「回聲%ERRORLEVEL%」 從CLI,我可以看到它是0。

2)如果我增加一行,以顯示從myperl.pl返回代碼,我可以看到從myperl.pl返回代碼正好是0

例如:

@echo off 
myperl.pl 
echo %errorlevel% 
REM exit %errorlevel% 

它會顯示0,所以Perl腳本恰好返回值。

3)如果我添加一行返回代碼手動設置爲0時,EXTERNAL.EXE工作正常。

@echo off 
myperl.pl 
result=0 
exit %result% 

這真的很奇怪。有任何想法嗎?我無法控制external.exe,所以我無法對其進行調試。

在這個例子中,%ERRORLEVEL%被調用兩次:從myperl.pl
1)返回到批次。
2)從mybatch.cmd返回到external.exe。這會是一個問題嗎?

回答

0

終於找到根本原因。

myperl.pl應該是完整路徑,否則external.exe不知道myperl.pl在哪裏。

0

你剛纔說的是正確的:myperl.pl返回一個錯誤級別,Batch文件接受它,然後它返回相應的errorlevel值。問題是這樣的:批處理文件,以什麼程序返回它的錯誤級別?

這個方案總是作爲​​一個父子關係:一個父進程執行一個子進程並等待它終止,然後父進程可以接受子進程返回的錯誤級別值。解決問題的方法是,如果external.exe程序以孩子身份執行批處理文件(cmd.exe)!但是,如果你「無法控制external.exe」,那麼就沒有辦法解決你的問題...

你怎麼知道外部的。exe程序「讀取批處理文件的返回碼(0-成功,其他 - 失敗)以決定要做什麼」?我認爲你在這一點上有困惑。

+0

謝謝@Aacini。該文件說「external.exe讀取mybatch.cmd的返回值,並且0成功,其他失敗」。如果我手動將批處理文件中的返回碼設置爲0或1,例如「設置結果= 0」,然後「退出%result%」,external.exe運行正常。問題是我需要在perl文件中設置值,而不是批處理文件。 – user1748640

相關問題