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
risposta
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
Un modo migliore sarebbe '7z.exe> nul 2> & 1 | comando echo non trovato', credo. – Joey
Il modo migliore sarebbe IMO: http://stackoverflow.com/a/27014081/1724702 –
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.
Yup,
@echo off
set found=
set program=7z.exe
for %%i in (%path%) do if exist %%i\%program% set found=%%i
echo "%found%"
Questo non funzionerà con i percorsi citati che contengono spazi. – Joey
Grazie, perché dici 'set found ='? – rynd
@ 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
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:
- Non si potrebbe davvero non so cosa fa il programma
- 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
- Il programma potrebbe essere alta intensità di risorse/lenta
Il problema è determinare se il programma è disponibile o meno, quindi è sufficiente controllare lo stesso.
Scommessa 'SE' condizione:' IF NOT ERRORLEVEL 0'. Vedi ['SE'] (http://ss64.com/nt/if.html). – jpmc26
Perché non consiglieresti di eseguirlo? È in generale o in questo caso particolare? – quimnuss
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. –
Non eseguire. Il modo migliore sarebbe IMO: http://stackoverflow.com/a/27014081/1724702 –