Un one-liner cmd.exe 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 nécessite le nom complet du binaire:, which perl.exe
non 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 for
commande est utilisée uniquement pour diviser la ext
valeur 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 perl
et which perl.exe
fonctionne.
.\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.