Estoy escribiendo un script de murciélago en el que invoco un programa (como javac). Para simplificar, quiero verificar si el comando existe antes de ejecutarlo. es decir, si el comando existe en PATH.
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 de hacer esto en Windows?
windows
command-line
batch
script
user46097
fuente
fuente
Respuestas:
fuente
>nul 2>nul
detrás demycommand
.El siguiente código siempre debe ejecutarse limpiamente sin salida de basura.
Salida:
El mismo código que una línea:
Salida:
Tenga en cuenta que el orden de
&&
y||
parece importar. Además, el comando cuya existencia está probando debe regresar con un nivel de error <= 0 para que esto funcione. Esperemos que el comando tenga /? o --ayuda argumentos o, como con java, un comando de información de versión.fuente
La forma más fácil es simplemente ejecutar el comando, pero eso tiene otros problemas, por supuesto, ya que tal vez no desee que se inicie un proceso aleatorio.
es una alternativa que busca el programa en las rutas enumeradas por la
%PATH%
variable de entorno. Es esencialmente una versión pura por lotes dewhich(1)
. Se puede hacer mejor, pero esencialmente esto es todo.fuente
Por mi situación La forma más simple es usar el || o operador &&.
o
fuente
Algunas mejoras a la versión a continuación. Pruebe que ese comando existe y suprima la salida innecesaria.
fuente
WHERE \Windows\System32\cmd.exe
=>INFO: Could not find files for the given pattern(s).
Si se requiere la instalación de herramientas adicionales, hay un
where
comando en los kits de recursos; ¿Ver el equivalente de Windows de whereis? .De lo contrario, para versiones de Windows que no son demasiado antiguas, es factible en estado puro
cmd
, como se menciona en la búsqueda ejecutable de DOS, excepto PATH .fuente
Sé que esto no es exactamente lo que está buscando, pero con un ligero cambio en la lógica, debería lograr lo que necesita.
Cada comando que se ejecuta tiene un código de retorno (también conocido como errorlevel), si el código de retorno es 0 (cero), el comando se ejecutó con éxito, si el código de retorno es mayor que 0, algo salió mal.
Ver aquí para más detalles.
Algo como -
fuente
Si bien todas esas formas podrían funcionar, ¿por qué no las incorporadas?
Ejecute "si /?" en la línea de comando para más detalles
fuente
PATH
.