2012-05-21 144 views
6

我正在爲Windows編寫批處理文件並使用命令7z(7-Zip)。我已將它的位置放在PATH中。有沒有一種比較簡單的方法來檢查命令是否可用?檢查命令是否在批處理文件中可用

+0

不要執行。IMO的最佳方式是:http://stackoverflow.com/a/27014081/1724702 –

回答

1

如果未找到該命令,則嘗試執行7z.exe將返回9009的%errorlevel%。你可以檢查。

7z.exe 
if %errorlevel%==9009 echo Command Not Found 
+0

更好的方法是'7z.exe> nul 2>&1 |回聲命令找不到',我猜。 – Joey

+0

IMO的最佳方式是:http://stackoverflow.com/a/27014081/1724702 –

-1

是的,打開命令窗口並輸入「7z」(我假設這是可執行文件的名稱)。如果你得到一個錯誤,說明命令或操作沒有被識別,那麼你知道路徑語句在某處存在問題,否則它不會。

1

是啊,

@echo off 
set found= 
set program=7z.exe 
for %%i in (%path%) do if exist %%i\%program% set found=%%i 
echo "%found%" 
+0

這不適用於包含空格的引用路徑。 – Joey

+0

謝謝,你爲什麼說'set found ='? – rynd

+0

@Joey有一個簡單的解決方案。使用雙引號。然而,如果在接受的解決方案中沒有指定命令的擴展名(exe,bat),這將無法正常工作。 – khattam

16

建議執行命令來檢查它是否可以使用(比方說,可以在PATH環境變量)。因此,我認爲最好的辦法是使用where命令:

where 7z.exe >nul 2>nul 
if %errorlevel%==1 (
    @echo 7z.exe not found in path. 
    [do something about it] 
) 

>nul2>nul是可選的;此處用於防止顯示由where命令生成的標準輸出和標準錯誤輸出。

更新:爲什麼你可能不希望執行:0​​

  1. 你可能不會真的不知道該程序的功能
  2. 程序可能有副作用 - 它可能會做一些事情,你知道,但不想 - 比如刪除文件,重新緩存等
  3. 程序可資源密集型/慢

問題是要確定程序是否可用,所以你應該檢查相同。

+1

投注'IF'條件:'IF NOT ERRORLEVEL 0'。參見['IF'](http://ss64.com/nt/if.html)。 – jpmc26

+1

你爲什麼不建議執行它?這是一般還是在這種特殊情況下? – quimnuss

+2

很多不執行的原因:副作用,你可能不知道程序做了什麼,程序可能是資源密集型/慢速等等。 –

相關問題