Un cmd.exe de una línea which
sería:
for %G in (<binary.exe>) do @echo.%~$PATH:G
Puede 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. Avísame si lo necesitas.
EDIT2: de todos modos, decidí escribir el archivo por lotes. Aquí está:
@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 sugestión 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
, el for
comando se usa solo para dividir el ext
valor entre ';' personaje. El valor de %PATHEXT%
se antepone con una extensión vacía, lo que permite buscar binarios con nombre completo, ambos which perl
y which perl.exe
funciona.
.\binary.*
primero. El sistema operativo siempre busca primero en el directorio actual, antes de buscar los directorios en la ruta del comando.