2010-06-02 78 views
2

我想寫一個簡單的批處理腳本,調用某個exe,但如果找不到這個腳本,它應該調用另一個exe。Windows批處理:對命令未找到的反應

所以在僞

set file=c:\path\tool.exe 
if(fileexists(file)) 
{ 
    call file 
} 
else 
{ 
    call c:\somethingelse.exe 
} 

的感謝!

回答

3

您可以使用ERRORLEVEL來檢查呼叫是否成功執行。

call file.exe 
IF ERRORLEVEL 1 other.exe 

這將適用於路徑中的可執行文件,但您不知道確切位置。它會打印一條錯誤消息。

+0

請注意,您也可以縮短這個時間:'file.exe || other.exe「(你並不需要''call' – Joey 2010-06-02 23:51:27

+0

這個問題,如果file.exe存在,但由於某種原因失敗,它也會執行other.exe。我們只想執行other.exe如果file.exe由於它不存在而失敗。 – 2011-08-16 23:20:43

2

也許像這樣的東西可能工作?

set FILE=whatever.exe 
IF EXIST %FILE% GOTO okay 

:notokay 
echo NOT FOUND 
GOTO end 

:okay 
echo FOUND 
%FILE% 

:end 
3

密切類似於僞代碼張貼在原題:

set FILE1=c:\path\tool.exe 
set FILE2=c:\path\to\other\tool.exe 
if exist "%FILE1%" (
    %FILE1% 
) else (
    %FILE2% 
) 

至於喬伊指出,這其實是打開的形式:

%FILE1% || %FILE2% 

,但我不同意。前者運行FILE2

  1. FILE1不存在,或
  2. 存在,但失敗了。

當文件無法執行(主要是因爲未找到或訪問被禁止)時,它還會打印一條額外的錯誤消息。爲了抑制這個信息的使用:

(%FILE1% || %FILE2%) 2>nul 

例如

> (echo a || echo b) 
a 
> (echoa || echo b) 2>nul 
b 

要禁止所有的輸出,只是安排一下,任何兩個文件的運行:

(%FILE1% || %FILE2%) 1>&2 2>nul 

或:

((%FILE1% || %FILE2%) 1>&2 2>nul) || echo both have failed 

如:

> ((echo a || echo b) 2>nul) || echo both have failed 
a 
> ((echoa || echo b) 2>nul) || echo both have failed 
b 
> ((echoa || echob) 2>nul) || echo both have failed 
both have failed