Bir cmd.exe tek astarı which
:
for %G in (<binary.exe>) do @echo.%~$PATH:G
Basit bir which.bat olarak kodlayabilirsiniz:
@echo off
for %%G in (%1) do @echo.%%~$PATH:G
EDIT: ikili tam adı gerektirir: which perl.exe
değil which perl
. % PATHEXT% değerini dikkate alan bir toplu iş dosyası yazmak mümkündür, bu nedenle ikili dosyanın tam adına ihtiyaç duymaz. İhtiyacınız olursa lütfen bana bildirin.
EDIT2: Yine de toplu iş dosyası yazmaya karar verdim. İşte burada:
@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
İlk olarak, Bob'un önerisine göre, ikili dizinin geçerli dizinde olup olmadığını kontrol eder. İkili bulunmazsa,% PATH% değişkeni üzerinden arama yapan başka bir döngü yürütülür.
Döngüler temel alınır if ... goto
, for
komut yalnızca ext
değeri ';' ile ayırmak için kullanılır karakter. Değeri %PATHEXT%
ikisi de - tam adlandırılmış ikili aramaya izin veren boş bir uzantısıyla başa eklenmesi which perl
ve which perl.exe
eserleri.
.\binary.*
. İşletim sistemi, komut yolundaki dizinleri aramadan önce her zaman önce geçerli dizinde arama yapar.