62 votos

Determinar si el comando se reconoce en un archivo de proceso por lotes

Estoy escribiendo un bate de script en el que invoco un programa (como javac). Por simplicidad, quiero comprobar si el comando existe antes de ejecutarlo. es decir, Si el comando existe en la RUTA.

Por ejemplo,

if (my_command.exe is a recognized command) then (
  my_command.exe my_args
) else (
  REM Output was probably "'my_command.exe' is not recognized as an internal or external command, operable program or batch file."
  REM Do not run my_command.exe
)

¿Cuál es la mejor manera para hacer esto en Windows?

72voto

Josh Santangelo Puntos 290
WHERE mycommand
IF %ERRORLEVEL% NEQ 0 ECHO mycommand wasn't found 

19voto

ngreen Puntos 181

El siguiente código se debe ejecutar siempre de manera limpia sin basura de salida.

javac -version >nul 2>&1 && (
    echo found javac
) || (
    echo fail
)

Salida:

found javac

El mismo código como un one-liner:

javaz -version >nul 2>&1 && ( echo found javac ) || ( echo fail )

Salida:

fail

Tenga en cuenta que el orden de && y || que parece importar. Además, el comando cuya existencia está probando para las necesidades de regresar con un errorlevel <= 0 para que esto funcione. Esperemos que el comando /? o --help argumentos o, como con java, una versión de comando info.

8voto

psur Puntos 743

La forma más fácil es simplemente ejecutar el comando, pero que tiene otros problemas, por supuesto, ya que tal vez usted no quiere tener un proceso aleatorio comenzó.

for %%x in (my_command.exe) do if not [%%~$PATH:x]==[] set MyCommandFound=1

es una alternativa que busca el programa en las rutas indicadas por el %PATH% variable de entorno. Básicamente se trata de un puro por lotes versión de which(1). Se puede hacer mejor, pero básicamente es eso.

3voto

NomeN Puntos 4106

Algunas mejoras a la versión siguiente. La prueba de que el comando existe y suprimir las innecesarias de salida.

WHERE scp >nul 2>nul
IF %ERRORLEVEL% EQU 0 ECHO scp found

1voto

Gilles Puntos 37591

Si que se requiera la instalación de herramientas extra está bien, hay un where comando en los kits de recursos; véase el equivalente en Windows de whereis?.

De lo contrario, para las versiones de Windows que no son demasiado antiguos, es factible en la pura cmd, como se menciona en Dos ejecutable de búsqueda de excepción de RUTA.

EnMiMaquinaFunciona.com

EnMiMaquinaFunciona es una comunidad de administradores de sistemas en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros sysadmin, hacer tus propias preguntas o resolver las de los demás.

Powered by: