¿Hay alguna manera de determinar rápidamente dónde %PATH%
se encuentra un binario (al que apunta la variable)?
Eso es algo que sería equivalente which perl
a un shell Unix tradicional.
Entiendo queEl kit de recursostiene un where
comando, pero este kit no está instalado en mi computadora (corporativa), por lo que no puedo usarlo where
.
Respuesta1
Un resumen de cmd.exe which
sería:
for %G in (<binary.exe>) do @echo.%~$PATH:G
Puedes codificarlo como un simple which.bat:
@echo off
for %%G in (%1) do @echo.%%~$PATH:G
EDITAR: requiere el nombre completo del binario:, which perl.exe
no which perl
. Es posible escribir un archivo por lotes que tenga en cuenta %PATHEXT%, por lo que no necesita el nombre completo del binario. Por favor avíseme si lo necesita.
EDITAR2: de todos modos decidí escribir el archivo por lotes. Aquí lo tienes:
@echo off
setlocal enabledelayedexpansion
set ext= ;%PATHEXT%
:extloop1
for /f "delims=; tokens=1,*" %%A in ("!ext!") do (
if exist %1%%A (
echo .\%1%%A
goto finish
)
set ext=%%B
)
if "!ext!" neq "" goto extloop1
set ext= ;%PATHEXT%
:extloop2
for /f "delims=; tokens=1,*" %%A in ("!ext!") do (
for %%C in (%1%%A) do (
if exist %%~$PATH:C (
echo %%~$PATH:C
goto finish
)
)
set ext=%%B
)
if "!ext!" neq "" goto extloop2
:finish
endlocal
Primero, según la sugerencia de Bob, verifica si el binario existe en el directorio actual. Si no se encuentra el binario, se ejecuta otro bucle que realiza la búsqueda a través de la variable %PATH%.
Los bucles se basan en if ... goto
, for
el comando se usa solo para dividir el ext
valor por ';' personaje. El valor de %PATHEXT%
va precedido de una extensión vacía, lo que permite buscar binarios con nombre completo: ambos which perl
y which perl.exe
funciona.
Respuesta2
Podrías probar la colección de utilidades de Paul Sadowski: incluye un archivo which
. Véalo en:http://www.paulsadowski.com/wsh/cmdprogs.htm