有沒有一種方法可以快速確定二進位檔案(變數%PATH%
指向的)所在的位置。
這相當於which perl
在傳統的 UNIX shell 中執行的操作。
我明白那個資源套件有一個where
命令,但該套件未安裝在我的(公司)計算機上,因此我無法使用where
.
答案1
cmd.exe 的單行程式碼如下which
:
for %G in (<binary.exe>) do @echo.%~$PATH:G
您可以將其編碼為簡單的which.bat:
@echo off
for %%G in (%1) do @echo.%%~$PATH:G
編輯:它需要二進位檔案的全名: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
首先,根據 Bob 的建議,它檢查當前目錄中是否存在二進位。如果未找到二進位文件,則會執行另一個循環,透過 %PATH% 變數進行搜尋。
循環基於if ... goto
,for
命令僅用於ext
透過“;”分割值特點。的值%PATHEXT%
前面帶有一個空擴展名,它允許搜尋完全命名的二進位檔案 -which perl
和都which perl.exe
有效。
答案2
您可以嘗試 Paul Sadowski 的實用程式集合 - 他包括一個which
.請參閱:http://www.paulsadowski.com/wsh/cmdprogs.htm