どうすれば「どれcmd.exe の "

どうすれば「どれcmd.exe の "

バイナリ(変数が%PATH%指す)がどこにあるかを素早く判断する方法はありますか。

which perlこれは、従来の Unix シェルで同等の機能を果たすものです。

という事は承知していますリソースキットコマンドがあります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% を考慮したバッチ ファイルを作成することは可能ですので、バイナリの完全な名前は必要ありません。必要な場合はお知らせください。

編集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 ... gotoforコマンドは値を ';' 文字で分割するためにのみ使用されますext。 の値の%PATHEXT%先頭には空の拡張子が付加され、完全な名前のバイナリを検索できるようになります。which perlと の両方which perl.exeが機能します。

答え2

Paul Sadowski のユーティリティ コレクションを試してみるのもよいでしょうwhich。これには が含まれています。次の場所で参照してください。http://www.paulsadowski.com/wsh/cmdprogs.htm

関連情報