2012-05-21 17 views
6

Sto scrivendo un file batch per Windows e utilizzare il comando 7z (7-Zip). Ho messo la posizione di esso nel PERCORSO. C'è un modo relativamente semplice per verificare se il comando è disponibile?Verificare se il comando è disponibile nel file batch

+0

Non eseguire. Il modo migliore sarebbe IMO: http://stackoverflow.com/a/27014081/1724702 –

risposta

1

Un tentativo di eseguire 7z.exe restituirà un %errorlevel% di 9009 se il comando non viene trovato. Puoi verificarlo.

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

Un modo migliore sarebbe '7z.exe> ​​nul 2> & 1 | comando echo non trovato', credo. – Joey

+0

Il modo migliore sarebbe IMO: http://stackoverflow.com/a/27014081/1724702 –

-1

Sì, aprire una finestra di comando e digitare "7z" (presumo che sia il nome dell'eseguibile). Se ricevi un errore che dice che il comando o l'operazione non sono riconosciuti allora sai che l'istruzione path ha un problema in qualche parte, altrimenti non lo fa.

1

Yup,

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

Questo non funzionerà con i percorsi citati che contengono spazi. – Joey

+0

Grazie, perché dici 'set found ='? – rynd

+0

@ Joey c'è una soluzione semplice per questo. Usa le virgolette. Tuttavia, questo non funzionerà se l'estensione del comando (exe, bat) non viene specificata mentre la soluzione accettata lo farà. – khattam

16

vorrei non consiglia di eseguire il comando per verificare se è disponibile per l'uso (ad esempio, disponibile in PATH variabile d'ambiente). Quindi penso che l'approccio migliore sarebbe utilizzando il comando where:

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

Il >nul e 2>nul sono opzionali; utilizzato qui per impedire la visualizzazione dell'output standard e dell'output di errore standard generato dal comando where.

Aggiornamento: Perché non si potrebbe desiderare di eseguire:

  1. Non si potrebbe davvero non so cosa fa il programma
  2. Il programma potrebbe avere effetti collaterali - si potrebbe fare qualcosa che si sa, ma non si vuole - come eliminare i file, ricreare la cache, ecc
  3. Il programma potrebbe essere alta intensità di risorse/lenta

Il problema è determinare se il programma è disponibile o meno, quindi è sufficiente controllare lo stesso.

+1

Scommessa 'SE' condizione:' IF NOT ERRORLEVEL 0'. Vedi ['SE'] (http://ss64.com/nt/if.html). – jpmc26

+1

Perché non consiglieresti di eseguirlo? È in generale o in questo caso particolare? – quimnuss

+2

Un sacco di motivi per non eseguire: effetti collaterali, potresti non sapere cosa fa il programma, il programma potrebbe essere ad uso intensivo di risorse/lento, ecc. –

Problemi correlati