回答:
cmd.exeの1行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
作品。
Paul Sadowskiのユーティリティのコレクションを試すことができますwhich
。彼にはが含まれています。それを見てください:http : //www.paulsadowski.com/wsh/cmdprogs.htm
.\binary.*
最初から最後まで確認することもできます。オペレーティングシステムは常に、コマンドパスのディレクトリを検索する前に、まず現在のディレクトリを検索します。