puedo puede los ejecutar ejecutan ejecuta archivos archivo abrir windows batch-file batch-processing

puede - no se ejecutan los exe windows 10



¿Cómo probar si existe un archivo ejecutable en% PATH% desde un archivo de proceso por lotes de Windows? (7)

Estoy buscando una manera simple de probar si existe un archivo ejecutable en la variable de entorno PATH desde un archivo por lotes de Windows.

No se permite el uso de herramientas externas no proporcionadas por el sistema operativo. La versión mínima de Windows requerida es Windows XP.


A veces, esta simple solución funciona, donde se comprueba si el resultado coincide con lo que se espera. La primera línea ejecuta el comando y toma la última línea de salida estándar.

FOR /F "tokens=*" %%i in ('' "xcopy /? 2> nul" '') do SET xcopyoutput=%%i if "%xcopyoutput%"=="" echo xcopy not in path.


Aquí hay una solución simple que intenta ejecutar la aplicación y luego maneja cualquier error.

file.exe /? 2> NUL IF NOT %ERRORLEVEL%==9009 ECHO file.exe exists in path

El código de error 9009 generalmente significa archivo no encontrado.

El único inconveniente es que file.exe se ejecuta realmente si se encuentra (que en algunos casos no es deseable).


Esto se puede lograr a través de la sustitución de parámetros.

%~$PATH:1

Esto devuelve la ruta completa del nombre de archivo ejecutable en% 1, sino una cadena vacía.

Esto no funciona con variables definidas por el usuario. Entonces, si el nombre de archivo ejecutable no es un parámetro para su script, entonces necesita una subrutina. Por ejemplo:

call :s_which app.exe if not "%_path%" == "" ( "%_path%" ) goto :eof :s_which setlocal endlocal & set _path=%~$PATH:1 goto :eof

Ver http://ss64.com/nt/syntax-args.html


Use el comando: powershell Test-Path "exe que está buscando"

Volverá True si está presente, de lo contrario será False.


Windows Vista y versiones posteriores se envían con un programa llamado where.exe que busca programas en la ruta. Funciona así:

D:/>where notepad C:/Windows/System32/notepad.exe C:/Windows/notepad.exe D:/>where where C:/Windows/System32/where.exe

Para usar en un archivo de proceso por lotes, puede usar el /q , que solo establece ERRORLEVEL y no produce ninguna salida.

where /q myapplication IF ERRORLEVEL 1 ( ECHO The application is missing. Ensure it is installed and placed in your PATH. EXIT /B ) ELSE ( ECHO Application exists. Let''s go! )

O una versión abreviada simple (pero menos legible) que imprime el mensaje y sale de su aplicación:

where /q myapplication || ECHO Cound not find app. && EXIT /B


@echo off set found= set prog=cmd.exe for %%i in (%path%) do if exist %%i/%prog% set found=%%i echo "%found%" if "%found%"=="" ....


for %%X in (myExecutable.exe) do (set FOUND=%%~$PATH:X) if defined FOUND ...

Si necesita esto para diferentes extensiones, simplemente itere sobre PATHEXT :

set FOUND= for %%e in (%PATHEXT%) do ( for %%X in (myExecutable%%e) do ( if not defined FOUND ( set FOUND=%%~$PATH:X ) ) )

Podría ser que ya existe también en las versiones heredadas de Windows, pero no tengo acceso a una, así que no puedo decirlo. En mi máquina, lo siguiente también funciona:

where myExecutable

y devuelve con un código de salida distinto de cero si no se pudo encontrar. Sin embargo, en un lote, probablemente también desee redirigir la salida a NUL .