Un cmd.exe one-liner per whichsarebbe:
for %G in (<binary.exe>) do @echo.%~$PATH:G
Puoi codificarlo come un semplice which.bat:
@echo off
for %%G in (%1) do @echo.%%~$PATH:G
EDIT: richiede il nome completo di binary:, which perl.exeno which perl. È possibile scrivere un file batch che prende in considerazione% PATHEXT%, quindi non necessita del nome completo di binario. Per favore fatemi sapere se ne avete bisogno.
EDIT2: comunque ho deciso di scrivere il file batch. Ecco qui:
@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
In primo luogo, come suggerito da Bob, verifica se il binario esiste nella directory corrente. Se il binario non viene trovato, viene eseguito un altro ciclo che esegue la ricerca attraverso la variabile% PATH%.
I loop sono basati su if ... goto, il forcomando viene utilizzato solo per dividere il extvalore per ';' carattere. Il valore di %PATHEXT%è anteposto con un'estensione vuota, che consente di cercare binari con nome completo - entrambi which perle which perl.exefunziona.
.\binary.*prima. Il sistema operativo cerca sempre prima nella directory corrente, prima di cercare le directory nel percorso del comando.