एक cmd.exe वन-लाइनर whichहोगा:
for %G in (<binary.exe>) do @echo.%~$PATH:G
आप इसे एक साधारण के रूप में कोड कर सकते हैं।
@echo off
for %%G in (%1) do @echo.%%~$PATH:G
EDIT: इसके लिए बाइनरी का पूरा नाम चाहिए: which perl.exeनहीं which perl। एक बैच फ़ाइल लिखना संभव है जो% PATHEXT% को ध्यान में रखता है, इसलिए इसे बाइनरी के पूर्ण नाम की आवश्यकता नहीं है। अगर आपको जरूरत हो तो कृपया मुझे बताएं।
EDIT2: वैसे भी मैंने बैच फाइल लिखने का फैसला किया है। यह रहा:
@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
सबसे पहले, बॉब के सक्सेशन के अनुसार, यह जाँच करता है कि बाइनरी वर्तमान निर्देशिका में मौजूद है या नहीं। यदि बाइनरी नहीं मिली है, तो एक और लूप निष्पादित किया जाता है जो% PATH% चर के माध्यम से खोज करता है।
लूप्स पर आधारित हैं if ... goto, forकमांड का उपयोग केवल ext'?;' को विभाजित करने के लिए किया जाता है । चरित्र। का मान %PATHEXT%एक खाली एक्सटेंशन के साथ रखा गया है, जो पूरी तरह से नाम बाइनरी के लिए खोज करने की अनुमति देता है - दोनों which perlऔर which perl.exeकाम करता है।
.\binary.*पहले जांच कर सकते हैं । ऑपरेटिंग सिस्टम हमेशा वर्तमान निर्देशिका में खोज करता है, इससे पहले कि यह कमांड पथ में निर्देशिकाओं को खोजे।