Un cmd.exe one-liner per which
sarebbe:
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.exe
no 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 for
comando viene utilizzato solo per dividere il ext
valore per ';' carattere. Il valore di %PATHEXT%
è anteposto con un'estensione vuota, che consente di cercare binari con nome completo - entrambi which perl
e which perl.exe
funziona.
.\binary.*
prima. Il sistema operativo cerca sempre prima nella directory corrente, prima di cercare le directory nel percorso del comando.