cmd.exeで「which <binary>」を実行する方法


10

%PATH%変数が指す)バイナリがどこにあるかをすばやく判断する方法はありますか?

これはwhich perl、従来のUNIXシェルと同等の機能です。

リソースキットwhereコマンドがあることを理解していますが、このキットは私の(企業)コンピューターにインストールされていないため、を使用できませんwhere

回答:


14

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 ... gotoforコマンドはext値を「;」で分割するためにのみ使用されます。キャラクター。値は、%PATHEXT%両方-完全名前バイナリの検索を可能にする空の拡張で付加されるwhich perlwhich perl.exe作品。


1
ええと、拡張バッチファイルを作成することになった場合は、.\binary.*最初から最後まで確認することもできます。オペレーティングシステムは常に、コマンドパスのディレクトリを検索する前に、まず現在のディレクトリを検索します。
ボブは

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.