Một cmd.exe một-liner cho which
sẽ là:
for %G in (<binary.exe>) do @echo.%~$PATH:G
Bạn có thể mã nó dưới dạng đơn giản which.bat:
@echo off
for %%G in (%1) do @echo.%%~$PATH:G
EDIT: nó yêu cầu tên đầy đủ của nhị phân : which perl.exe
, không which perl
. Có thể viết một tệp bó có thể xem xét% PATHEXT%, vì vậy nó không cần tên đầy đủ của nhị phân. Xin vui lòng cho tôi biết nếu bạn cần nó.
EDIT2: dù sao tôi đã quyết định viết tệp bó. Đây là:
@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
Đầu tiên, theo sự ngăn chặn của Bob, nó sẽ kiểm tra xem nhị phân có tồn tại trong thư mục hiện tại không. Nếu không tìm thấy nhị phân, một vòng lặp khác được thực hiện để tìm kiếm thông qua biến% PATH%.
Các vòng lặp dựa trên if ... goto
, for
lệnh chỉ được sử dụng để phân chia ext
giá trị theo ';' tính cách. Giá trị của %PATHEXT%
được thêm vào một phần mở rộng trống, cho phép tìm kiếm nhị phân có tên đầy đủ - cả hai which perl
và which perl.exe
hoạt động.
.\binary.*
trước. Hệ điều hành luôn tìm kiếm trong thư mục hiện tại trước, trước khi nó tìm kiếm các thư mục trong đường dẫn lệnh.