Un one-liner cmd.exe whichserait:
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 nécessite le nom complet du binaire:, which perl.exenon which perl. Il est possible d'écrire un fichier batch qui prend en compte% PATHEXT%, il n'a donc pas besoin du nom complet du binaire. Faites-le moi savoir si vous en avez besoin.
EDIT2: de toute façon j'ai décidé d'écrire le fichier batch. C'est ici:
@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, selon la suggestion de 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, la forcommande est utilisée uniquement pour diviser la extvaleur par ';' personnage. La valeur de %PATHEXT%est ajoutée avec une extension vide, ce qui permet de rechercher un binaire entièrement nommé - les deux which perlet which perl.exefonctionne.
.\binary.*abord. Le système d'exploitation recherche toujours d'abord dans le répertoire en cours, avant de rechercher dans les répertoires du chemin de commande.