Uma linha única de cmd.exe para which
seria:
for %G in (<binary.exe>) do @echo.%~$PATH:G
Você pode codificá-lo como um simples what.bat:
@echo off
for %%G in (%1) do @echo.%%~$PATH:G
EDIT: requer nome completo do binário:, which perl.exe
não which perl
. É possível gravar um arquivo em lote que leve% PATHEXT% em consideração, para que não seja necessário o nome completo do binário. Entre em contato se precisar.
EDIT2: de qualquer maneira eu decidi escrever o arquivo em lotes. Aqui 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
Primeiro, conforme a sugestão de Bob, ele verifica se o binário existe no diretório atual. Se o binário não for encontrado, outro loop será executado, que fará a busca pela variável% PATH%.
Os loops são baseados if ... goto
, o for
comando é usado apenas para dividir o ext
valor por ';' personagem. O valor de %PATHEXT%
é anexado com uma extensão vazia, que permite procurar por binário totalmente nomeado - ambos which perl
e which perl.exe
funciona.
.\binary.*
primeiro. O sistema operacional sempre pesquisa primeiro no diretório atual, antes de pesquisar os diretórios no caminho do comando.