2012-05-21 17 views
6

Estoy escribiendo un archivo por lotes para Windows y uso el comando 7z (7-Zip). He puesto su ubicación en el PATH. ¿Hay una manera relativamente fácil de verificar si el comando está disponible?Compruebe si el comando está disponible en el archivo por lotes

+0

No ejecutar. La mejor manera IMO sería: http://stackoverflow.com/a/27014081/1724702 –

Respuesta

1

Un intento de ejecutar 7z.exe devolverá un %errorlevel% de 9009 si no se encuentra el comando. Puedes verificar eso.

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

Una manera más agradable sería '7z.exe> ​​nul 2> & 1 | echo Command not found', supongo. – Joey

+0

La mejor forma en que IMO sería: http://stackoverflow.com/a/27014081/1724702 –

-1

Sí, abra una ventana de comandos y escriba "7z" (supongo que es el nombre del ejecutable). Si recibe un error que dice que el comando u operación no se reconoce, entonces sabe que la instrucción de ruta tiene un problema en alguna parte, de lo contrario no lo hace.

1

Sí,

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

Esto no funcionará con las rutas entre comillas que contienen espacios. – Joey

+0

Gracias, ¿por qué dices 'set found ='? – rynd

+0

@Joey hay una solución fácil para eso. Usa comillas dobles Sin embargo, esto no funcionará si la extensión de comando (exe, bat) no se especifica mientras que la solución aceptada lo hará. – khattam

16

me habría no recomiendan ejecutar el comando para comprobar si está disponible para su uso (por ejemplo, disponible en PATH variable de entorno). Así que creo que el mejor enfoque sería utilizar el comando where:

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

El >nul y 2>nul son opcionales; utilizado aquí para evitar la visualización de la salida estándar y la salida de error estándar generada por el comando where.

actualización: ¿Por qué es posible que no desee ejecutar:

  1. Es posible que no realmente no sabe lo que hace el programa
  2. El programa podría tener efectos secundarios - que podría hacer algo que usted sabe, pero no quiere - como borrar archivos, vuelva a crear la caché, etc.
  3. El programa podría ser un recurso intensivo/lenta

El problema es determinar si el programa está disponible o no, por lo que debe verificarlo.

+1

Apostando la condición 'IF':' IF NOT ERRORLEVEL 0'. Ver ['IF'] (http://ss64.com/nt/if.html). – jpmc26

+1

¿Por qué no recomendarías ejecutarlo? ¿Es en general o en este caso particular? – quimnuss

+2

Hay muchas razones para no ejecutar: efectos secundarios, es posible que no sepas qué hace el programa, el programa puede ser intensivo en recursos/lento, etc. –

Cuestiones relacionadas