Un one-liner cmd.exe pour which
serait :
for %G in (<binary.exe>) do @echo.%~$PATH:G
Vous pouvez le coder comme un simple which.bat :
@echo off
for %%G in (%1) do @echo.%%~$PATH:G
EDIT : il faut le nom complet du binaire : which perl.exe
, pas which perl
. Il est possible d'écrire un fichier batch qui prend en compte %PATHEXT%, de sorte qu'il n'a pas besoin du nom complet du binaire. N'hésitez pas à me le faire savoir si vous en avez besoin.
EDIT2 : j'ai quand même décidé d'écrire le fichier batch. Le voici :
@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
Tout d'abord, comme le suggère Bob, il vérifie si le binaire existe dans le répertoire courant. Si le binaire n'est pas trouvé, une autre boucle est exécutée qui effectue la recherche dans la variable %PATH%.
Les boucles sont basées sur if ... goto
, for
n'est utilisée que pour diviser le ext
par le caractère ';'. La valeur de %PATHEXT%
est précédé d'une extension vide, ce qui permet de rechercher des binaires entièrement nommés - à la fois des which perl
et which perl.exe
œuvre.