Satu cmd.exe untuk which
:
for %G in (<binary.exe>) do @echo.%~$PATH:G
Anda dapat mengkodekannya sebagai that.bat sederhana:
@echo off
for %%G in (%1) do @echo.%%~$PATH:G
EDIT: memerlukan nama lengkap biner:, which perl.exe
tidak which perl
. Dimungkinkan untuk menulis file batch yang mempertimbangkan% PATHEXT%, sehingga tidak perlu nama lengkap biner. Tolong beri tahu saya jika Anda membutuhkannya.
EDIT2: Lagi pula saya memutuskan untuk menulis file batch. Ini dia:
@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
Pertama, sesuai dengan saran Bob, ia memeriksa apakah biner ada di direktori saat ini. Jika biner tidak ditemukan, loop lain dijalankan yang melakukan pencarian melalui variabel% PATH%.
Loop didasarkan if ... goto
, for
perintah hanya digunakan untuk membagi ext
nilai dengan ';' karakter. Nilai %PATHEXT%
ini diawali dengan ekstensi kosong, yang memungkinkan untuk mencari biner yang sepenuhnya bernama - keduanya which perl
dan which perl.exe
berfungsi.
.\binary.*
dulu. Sistem operasi selalu mencari di direktori saat ini terlebih dahulu, sebelum mencari direktori di jalur perintah.