cmd.exe หนึ่งซับสำหรับwhich
จะเป็น:
for %G in (<binary.exe>) do @echo.%~$PATH:G
คุณสามารถเขียนมันเป็นไฟล์ง่ายๆ
@echo off
for %%G in (%1) do @echo.%%~$PATH:G
แก้ไข: มันต้องมีชื่อเต็มของไบนารี: ไม่which perl.exe
which perl
เป็นไปได้ที่จะเขียนแบตช์ไฟล์ที่คำนึงถึง% PATHEXT% เข้ามาดังนั้นจึงไม่จำเป็นต้องใช้ชื่อเต็มของไบนารี โปรดแจ้งให้เราทราบหากคุณต้องการ
แก้ไข 2: อย่างไรก็ตามฉันตัดสินใจที่จะเขียนไฟล์แบตช์ นี่มันคือ:
@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
ครั้งแรกตามความแออัดของ Bob จะตรวจสอบว่าไบนารีอยู่ในไดเรกทอรีปัจจุบัน หากไม่พบไบนารีจะมีการดำเนินการลูปอื่นซึ่งทำการค้นหาผ่านตัวแปร% PATH%
ลูปจะขึ้นอยู่กับif ... goto
, for
คำสั่งที่ใช้เพียงเพื่อที่จะแบ่งext
ค่าโดย ';' ตัวละคร ค่าของ%PATHEXT%
ถูกเติมด้วยส่วนขยายที่ว่างซึ่งอนุญาตให้ค้นหาไบนารีที่มีชื่อเต็ม - ทั้งwhich perl
และใช้which perl.exe
งานได้
.\binary.*
ก่อน ระบบปฏิบัติการค้นหาในไดเรกทอรีปัจจุบันก่อนเสมอก่อนที่จะค้นหาไดเรกทอรีในเส้นทางคำสั่ง