Windowsコマンドラインに「which」に相当するものはありますか?


2352

自分のcmdスクリプトの1つが別のプログラム(パスの前の方)によって隠されている(シャドウされている)パスの問題が時々あるので、与えられたWindowsコマンドラインでプログラムへの完全パスを見つけられるようにしたいと思います。その名前だけ。

UNIXコマンド「which」に相当するものはありますか?

UNIXではwhich command、指定されたコマンドの完全なパスを出力して、これらのシャドウイングの問題を簡単に見つけて修復します。


3
Foredecker:「which」は、シェルプロンプトでコマンドを入力した場合に実行される実行可能ファイルのPATHを検索します。
グレッグ・ヒューギル

3
あなたが持っている場合たとえば、Javaの5つのバージョンがインストールされて、あなたは1つがあなたが「どのJava」を入力することができます使用されているかわからないし、それはあなたのバイナリへのパスできます
ninesided

9
@ Foredecker、MRはWin2k3の「どこ」にあると言いますが、Win2k3は問題の一部ではありませんでした。「where」が他のWindowsバージョンにない場合、他の回答も有効です。IMNSHO、すべてのWindowsバージョンで機能する答えが最高です。また、他の答えは間違っていません。それを行う方法が異なるだけです。
paxdiablo 2008年

36
この質問はSuperUserの前に発生したことは知っていますが、おそらくそこに属しています。
palswim

16
which標準のUnixにはコマンドはありません。POSIXユーティリティはtypeです。Cシェルにはwhichコマンドがあり、一部のシステムではこれを外部実行可能ファイルとして持っています。たとえば、Debian Linuxでは、whichというパッケージから取得されdebutilsます。この外部whichは、シェルの組み込み、エイリアス、または関数を「認識」しません。typeする; Bashにtypeは、それを抑制してパス検索を実行するオプションがあります。
Kaz

回答:


2551

Windows Server 2003以降(つまり、Windows XP 32ビット以降)は、実行可能なコマンドだけでなく、すべての種類のファイルに一致しますが、where.exe一部の処理を実行するプログラムを提供しwhichます。(これは、などの組み込みシェルコマンドとは一致しませんcd。)ワイルドカードを使用することもできるため、現在のディレクトリ内でで始まる名前のwhere nt*すべてのファイルを検索します。%PATH%nt

where /?助けを求めてください。

Windows PowerShellが定義されていることを注意whereの別名としてコマンドレットは、そうしたい場合、あなたは省略するのではなく、完全な名前を入力する必要が拡張子を。Where-Objectwhere.exe.exe


30
いいえ、grepは入力の内容を検査するため、明示的に指定する必要があります。whichおよびwhere.exeは、PATH環境変数で設定された一連のディレクトリ内のファイルの名前のみを調べます。
Michael Ratanapintha

12
@ Ajedi32-正解です。これはXPにはありません。私が言ったように、「Windows Server 2003以降」。
Michael Ratanapintha 2012

24
Windows 8で動作します
rob

57
where.exeを入力しない限り、これはpowershellで機能しないことに注意してください
JonnyRaa

17
where.exeは組み込みのシェルではないことを覚えておいて%windir%\system32ください。あなたはあなたが持っている必要があります%PATH%-これはそうではないかもしれませんwhere
Tomasz Gandor

288

新しいバージョンのWindowsにはwhereコマンドがありますが、次のように環境変数修飾子を使用して、Windows XPでもこれを行うことができます。

c:\> for %i in (cmd.exe) do @echo.   %~$PATH:i
   C:\WINDOWS\system32\cmd.exe

c:\> for %i in (python.exe) do @echo.   %~$PATH:i
   C:\Python25\python.exe

追加のツールは必要ありませんPATH。使用したい環境変数(もちろんパス形式)を置き換えることができるため、ツールは限定されません。


そして、もしあなたが(Windows自体がするように)PATHEXTのすべての拡張を処理できるものが欲しいなら、これはトリックをします:

@echo off
setlocal enableextensions enabledelayedexpansion

:: Needs an argument.

if "x%1"=="x" (
    echo Usage: which ^<progName^>
    goto :end
)

:: First try the unadorned filenmame.

set fullspec=
call :find_it %1

:: Then try all adorned filenames in order.

set mypathext=!pathext!
:loop1
    :: Stop if found or out of extensions.

    if "x!mypathext!"=="x" goto :loop1end

    :: Get the next extension and try it.

    for /f "delims=;" %%j in ("!mypathext!") do set myext=%%j
    call :find_it %1!myext!

:: Remove the extension (not overly efficient but it works).

:loop2
    if not "x!myext!"=="x" (
        set myext=!myext:~1!
        set mypathext=!mypathext:~1!
        goto :loop2
    )
    if not "x!mypathext!"=="x" set mypathext=!mypathext:~1!

    goto :loop1
:loop1end

:end
endlocal
goto :eof

:: Function to find and print a file in the path.

:find_it
    for %%i in (%1) do set fullspec=%%~$PATH:i
    if not "x!fullspec!"=="x" @echo.   !fullspec!
    goto :eof

実際にはすべての可能性が返されますが、特定の検索ルールに合わせて簡単に調整できます。


7
ねえ、私はそれを学んでいたらいいのに!MS-DOSやWin9x(つまり、command.com)では機能しません。(Raymond Chenには、バッチファイルに変換できるより「精巧な」バージョンがあります:blogs.msdn.com/oldnewthing/archive/2005/01/20/357225.aspx
Michael Ratanapintha

110
@Michael、まだDOSまたはWin95を使用している場合、パスで実行可能ファイルを見つけることが問題の最小です:-)
paxdiablo

Windowsは.exe以上を実行可能ファイルとして認識します。前回which、W95 / DOS時代に戻ってコーディングしたとき、検索順序は、現在のディレクトリ、次にcmd.com、次にcmd.exe、次にcmd.batの各パスdirでした。したがって、現在のディレクトリのcmd.batもパスのどこかにbefroe cmd.exe soemを実行
Mawgはモニカを

3
@mawg、オリジナルは拡張機能を知っている場所用でした。これは、UNIXの下で拡張機能をミラーリングするためです(拡張機能を追加するトリックが発生しない場合)。私は今あなたが望むことをすることができるものを追加しました、しかしそれはもはやスクリプトのような単純なコマンドではありません。まず、飾りのないコマンドを試し、次に各拡張コマンドを試します。お役に立てば幸いです。必要に応じて調整できます(たとえば、Windowsと同じ検索順序が必要な場合-これはすべての可能性を示します)。
paxdiablo

2
これをバッチスクリプトに変換するには、「which.bat」というファイルを作成します。cmd.exe @echo off for %%i in (%1) do @echo. %%~$PATH:%i を実行するたびにロードするalias.batスクリプトに追加するには(上記のスクリプトをC:\ usrという新しいディレクトリに置きます) \エイリアス): DOSKEY which=C:\usr\aliases\which.bat $* その後、alias.batファイルで打ち上げCMD.EXEにスクリプトを作ることができます: cmd.exe /K E:\usr\aliases\alias.bat
ブラッド・T.

152

PowerShellでは、のGet-Commandどこにでも実行可能ファイルが見つかります$Env:PATH

Get-Command eventvwr

CommandType   Name          Definition
-----------   ----          ----------
Application   eventvwr.exe  c:\windows\system32\eventvwr.exe
Application   eventvwr.msc  c:\windows\system32\eventvwr.msc

また、PowerShellコマンドレット、関数、エイリアス、カスタム実行可能ファイルの拡張子を持つファイルを経由して見つけた$Env:PATHEXT(かなりバッシュのに似て現在のシェルのために定義された、などtype -a foo) -それは良く行く-に作るような他のツールよりもwhere.exewhich.exeこれらの気づいていないなど、 PowerShellコマンド。

名前の一部のみを使用して実行可能ファイルを検索する

gcm *disk*

CommandType     Name                             Version    Source
-----------     ----                             -------    ------
Alias           Disable-PhysicalDiskIndication   2.0.0.0    Storage
Alias           Enable-PhysicalDiskIndication    2.0.0.0    Storage
Function        Add-PhysicalDisk                 2.0.0.0    Storage
Function        Add-VirtualDiskToMaskingSet      2.0.0.0    Storage
Function        Clear-Disk                       2.0.0.0    Storage
Cmdlet          Get-PmemDisk                     1.0.0.0    PersistentMemory
Cmdlet          New-PmemDisk                     1.0.0.0    PersistentMemory
Cmdlet          Remove-PmemDisk                  1.0.0.0    PersistentMemory
Application     diskmgmt.msc                     0.0.0.0    C:\WINDOWS\system32\diskmgmt.msc
Application     diskpart.exe                     10.0.17... C:\WINDOWS\system32\diskpart.exe
Application     diskperf.exe                     10.0.17... C:\WINDOWS\system32\diskperf.exe
Application     diskraid.exe                     10.0.17... C:\WINDOWS\system32\diskraid.exe
...

カスタム実行可能ファイルを見つける

他のWindows以外の実行可能ファイル(python、ruby、perlなど)を見つけるには、これらの実行可能ファイルのファイル拡張子をPATHEXT環境変数(デフォルトは.COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH;.MSC;.CPL)に追加して、これらの拡張子を持つファイルをPATH実行可能ファイルとして識別する必要があります。Get-Commandこの変数を尊重する、それがリストのカスタム実行ファイルに拡張することができます。例えば

$Env:PATHEXT="$Env:PATHEXT;.dll;.ps1;.psm1;.py"     # temporary assignment, only for this shell's process

gcm user32,kernel32,*WASM*,*http*py

CommandType     Name                        Version    Source
-----------     ----                        -------    ------
ExternalScript  Invoke-WASMProfiler.ps1                C:\WINDOWS\System32\WindowsPowerShell\v1.0\Invoke-WASMProfiler.ps1
Application     http-server.py              0.0.0.0    C:\Users\ME\AppData\Local\Microsoft\WindowsApps\http-server.py
Application     kernel32.dll                10.0.17... C:\WINDOWS\system32\kernel32.dll
Application     user32.dll                  10.0.17... C:\WINDOWS\system32\user32.dll

sal which gcm(短縮形のset-alias which get-command)を使用すると、エイリアスをすばやく設定できます。

詳細と例については、のオンラインヘルプを参照してくださいGet-Command


2
実行可能ファイルだけではありません。また、コマンドファイルもキャッチします
Maximilian Burszley '30 / 11/18

2
@ TheIncorrigible1- バッチファイル(、など)のようなコマンドファイルを意味する場合、それらの拡張子は変数(デフォルトでは)で指定されているため、実行可能と見なされます。他の実行可能ファイルの種類(例えば、等)にファイル拡張子を追加しとともに実行関連作成することによって追加することができる/する-例えばdocs.python.org/3.3/using/....BAT.CMDPATHEXTPATHEXT=.COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH;.MSC;.CPL.py.rbassocftype
shalomb


40

PowerShellがインストールされている場合(これをお勧めします)、次のコマンドを大まかな同等物として使用できます(実行可能ファイルの名前をprogramNameに置き換えます)。

($Env:Path).Split(";") | Get-ChildItem -filter programName*

詳細はこちら: My Manwich!PowerShellどちら


1
私はこの正確なパワーシェルコマンドを探していました。私はwhere.exeを使用していましたが、その出力を解析する上でエラーコードをいじる必要があることは、ネイティブのpowershellソリューションよりもはるかに劣っています。ありがとう!
scobi 2012年

9
しかし($Env:Path).Split(";") | Get-ChildItem -filter programName*、タイプするのはとても簡単です... ;-)
クレイグ

これは、システムによって通常解決される変数(別名%JAVA_HOME%)がパスにある場合にも失敗します。
dragon788

which.exeを動作させることができません。これを試しましたが、動作しました。
Asfand Qazi



17

Cygwinはソリューションです。サードパーティのソリューションを使用しても構わない場合は、Cygwinが適しています。

Cygwinは、Windows環境での* nixの快適さを提供します(Windowsコマンドシェルで使用するか、任意の* nixシェルを使用できます)。whichWindows向けの* nixコマンド(など)のホスト全体を提供し、そのディレクトリをに含めるだけで済みますPATH


10
先ほどFerruccioが述べたGnuWin32は、ネイティブ実行可能な場所だけでも実行できるため、この場合ははるかに優れています。
Piotr Dobrogost、2011

GnuWin32はすばらしいので、私はそれを使用していますが、GnuWin32ツールをインストールせずにこの機能が必要な場合は、where.exeが正しい呼び出しのように見えます。ただし、GnuWin32ツールをネットワーク上の\ bin $共有に配置して、ローカルにインストールされていないワークステーション(およびバッチファイル)から使用できるようにします。
Craig

1
WindowsでのCygwinの使用について話すとき、私は次のことを好みます:cygpath -w "` which <appname> `"
mpasko256

12

PowerShellでは、でありgcm、他のコマンドに関するフォーマットされた情報を提供します。実行可能ファイルへのパスのみを取得する場合は、を使用します.Source

たとえば:gcm gitまたは(gcm git).Source

こつこつ:

  • Windows XPで利用できます。
  • PowerShell 1.0以降で使用できます。
  • gcmGet-Commandコマンドレットのエイリアスです。
  • パラメータを指定しないと、ホストシェルが提供する使用可能なすべてのコマンドが一覧表示されます。
  • でカスタムエイリアスを作成し、次のSet-Alias which gcmように使用できます(which git).Source
  • 公式ドキュメント:https : //technet.microsoft.com/en-us/library/ee176842.aspx

11

PowerShellプロファイルに「which」という名前の関数があります

function which {
    get-command $args[0]| format-list
}

出力は次のようになります。

PS C:\Users\fez> which python


Name            : python.exe
CommandType     : Application
Definition      : C:\Python27\python.exe
Extension       : .exe
Path            : C:\Python27\python.exe
FileVersionInfo : File:             C:\Python27\python.exe
                  InternalName:
                  OriginalFilename:
                  FileVersion:
                  FileDescription:
                  Product:
                  ProductVersion:
                  Debug:            False
                  Patched:          False
                  PreRelease:       False
                  PrivateBuild:     False
                  SpecialBuild:     False
                  Language:

他の解決策はどれも私にとっては> get-command app.exe | format-listうまくいきませんでしたが、完璧に働きました!
Alexander McFarlane

10

ここからunxutilsを入手してください:http ://sourceforge.net/projects/unxutils/

Windowsプラットフォームのゴールドでは、すべての素晴らしいUNIXユーティリティを標準のWindows DOSに配置します。何年も使用しています。

「どっちか」が含まれています。ただし、大文字と小文字は区別されます。

注意:インストールするには、zipをどこかに展開し、... \ UnxUtils \ usr \ local \ wbin \をシステムパスの環境変数に追加します。


2
大文字と小文字は区別されません。また、どのjava.exeではなく、どのjava.exeを使用するかを指定する必要があります
-Windows

改行に関係するものの、いくつかの不満があります。たとえば、grepは.、\ r にa を付けないとEOLに一致しません。それは確かに99%の解決策です!
ダッシュトムバン

はい、大文字と小文字は区別されませんが、デフォルトではWindowsのファイル名も大文字と小文字が区別されません。
Wernfried Domscheit


8

無料のPascalコンパイラを見つけたら、これをコンパイルできます。少なくともそれは機能し、必要なアルゴリズムを示します。

program Whence (input, output);
  Uses Dos, my_funk;
  Const program_version = '1.00';
        program_date    = '17 March 1994';
  VAR   path_str          : string;
        command_name      : NameStr;
        command_extension : ExtStr;
        command_directory : DirStr;
        search_dir        : DirStr;
        result            : DirStr;


  procedure Check_for (file_name : string);
    { Check existence of the passed parameter. If exists, then state so   }
    { and exit.                                                           }
  begin
    if Fsearch(file_name, '') <> '' then
    begin
      WriteLn('DOS command = ', Fexpand(file_name));
      Halt(0);    { structured ? whaddayamean structured ? }
    end;
  end;

  function Get_next_dir : DirStr;
    { Returns the next directory from the path variable, truncating the   }
    { variable every time. Implicit input (but not passed as parameter)   }
    { is, therefore, path_str                                             }
    var  semic_pos : Byte;

  begin
      semic_pos := Pos(';', path_str);
      if (semic_pos = 0) then
      begin
        Get_next_dir := '';
        Exit;
      end;

      result := Copy(Path_str, 1, (semic_pos - 1));  { return result   }
      { Hmm! although *I* never reference a Root drive (my directory tree) }
      { is 1/2 way structured), some network logon software which I run    }
      { does (it adds Z:\ to the path). This means that I have to allow    }
      { path entries with & without a terminating backslash. I'll delete   }
      { anysuch here since I always add one in the main program below.     }
      if (Copy(result, (Length(result)), 1) = '\') then
         Delete(result, Length(result), 1);

      path_str := Copy(path_str,(semic_pos + 1),
                       (length(path_str) - semic_pos));
      Get_next_dir := result;
  end;  { Of function get_next_dir }

begin
  { The following is a kludge which makes the function Get_next_dir easier  }
  { to implement. By appending a semi-colon to the end of the path         }
  { Get_next_dir doesn't need to handle the special case of the last entry }
  { which normally doesn't have a semic afterwards. It may be a kludge,    }
  { but it's a documented kludge (you might even call it a refinement).    }
  path_str := GetEnv('Path') + ';';

  if (paramCount = 0) then
  begin
    WriteLn('Whence: V', program_version, ' from ', program_date);
    Writeln;
    WriteLn('Usage: WHENCE command[.extension]');
    WriteLn;
    WriteLn('Whence is a ''find file''type utility witha difference');
    Writeln('There are are already more than enough of those :-)');
    Write  ('Use Whence when you''re not sure where a command which you ');
    WriteLn('want to invoke');
    WriteLn('actually resides.');
    Write  ('If you intend to invoke the command with an extension e.g ');
    Writeln('"my_cmd.exe param"');
    Write  ('then invoke Whence with the same extension e.g ');
    WriteLn('"Whence my_cmd.exe"');
    Write  ('otherwise a simple "Whence my_cmd" will suffice; Whence will ');
    Write  ('then search the current directory and each directory in the ');
    Write  ('for My_cmd.com, then My_cmd.exe and lastly for my_cmd.bat, ');
    Write  ('just as DOS does');
    Halt(0);
  end;

  Fsplit(paramStr(1), command_directory, command_name, command_extension);
  if (command_directory <> '') then
  begin
WriteLn('directory detected *', command_directory, '*');
    Halt(0);
  end;

  if (command_extension <> '') then
  begin
    path_str := Fsearch(paramstr(1), '');    { Current directory }
    if   (path_str <> '') then WriteLn('Dos command = "', Fexpand(path_str), '"')
    else
    begin
      path_str := Fsearch(paramstr(1), GetEnv('path'));
      if (path_str <> '') then WriteLn('Dos command = "', Fexpand(path_str), '"')
                          else Writeln('command not found in path.');
    end;
  end
  else
  begin
    { O.K, the way it works, DOS looks for a command firstly in the current  }
    { directory, then in each directory in the Path. If no extension is      }
    { given and several commands of the same name exist, then .COM has       }
    { priority over .EXE, has priority over .BAT                             }

    Check_for(paramstr(1) + '.com');     { won't return if file is found }
    Check_for(paramstr(1) + '.exe');
    Check_for(paramstr(1) + '.bat');

    { Not in current directory, search through path ... }

    search_dir := Get_next_dir;

    while (search_dir <> '') do
    begin
       Check_for(search_dir + '\' + paramstr(1) + '.com');
       Check_for(search_dir + '\' + paramstr(1) + '.exe');
       Check_for(search_dir + '\' + paramstr(1) + '.bat');
       search_dir := Get_next_dir;
    end;

    WriteLn('DOS command not found: ', paramstr(1));
  end;
end.

21
うわー、まだパスカルを使っている人はいますか?:-)
paxdiablo

6
あると思います。しかし、私ではありません。行program_date = '17 March 1994 'が表示されましたか。
Mawgはモニカを

1
ユニットmy_funk;は不要です。Pascalプログラムを投稿していただきありがとうございます。私の若さを思い出させてくれます。パスカルが進化しなかったのはとても残念だ。
yannis

2
ああ、でもそうだった。たとえば、オブジェクト指向になりました。そこ偉大な自由、クロスプラットフォーム、実装、およびIDEはであるlazarus-ide.org そして、ボーランドの直系の子孫はまだで、Delphiで住んembarcadero.com/products/delphiスターター版のための$ 299(IMO)非常に高価です「使用可能な」エディションでは$ 1k。ただし、Windows、iO、Mac、Androidのクロスプラットフォームです。試用版を入手するか、Lazarusを使用して20歳若く感じて
ください。-

1
@yannis「Pascalが進化しなかったのは残念なこと」...「Turbo Pascal」を除いて、アンダースがC#の設計に取り掛かっているということですか?
piers7 2015年

7

私がWindowsで見つけた最高のバージョンは、Joseph Newcomerの「whereis」ユーティリティで、彼のサイトから(ソース付きで)入手できます。

「whereis」の開発に関する記事は一読に値します。


1
最近のコメント:whereisには、Win 7 64ビットで64ビットの実行可能ファイルを見つけるのに問題があります。
Axel Kemper


6

私がインターネットで見つけたUnixのWin32ポートはどれも満足のいくものではありません。これらすべてに次の1つ以上の欠点があるためです。

  • Windows PATHEXT変数はサポートされていません。(パスをスキャンする前に各コマンドに暗黙的に追加された拡張機能のリストとその順序を定義しています。)(私は多くのtclスクリプトを使用しており、それらを見つけることができるツールは公開されていません。)
  • cmd.exeコードページはサポートされていないため、非ASCII文字のパスが正しく表示されません。(私はそれに非常に敏感で、自分のファーストネームにçを使っています:-))
  • cmd.exeおよびPowerShellコマンドラインでの個別の検索ルールはサポートされていません。(一般に利用可能なツールでは、PowerShellウィンドウでは.ps1スクリプトは見つかりませんが、cmdウィンドウでは見つかりません!)

だから私は最終的に自分でそれを書きました、それは上記すべてを正しくサポートします。

そこから入手可能:http : //jf.larvoire.free.fr/progs/which.exe


参考までに、github.com / JFLarvoire / SysToolsLibで、上記のwhich.exeツールや他の多くのツールをオープンソース化しました。そこで最新バージョンを入手したり、問題を報告したりできます。
Jean-FrançoisLarvoire 16年

6

このバッチファイルは、CMD変数処理を使用して、パスで実行されるコマンドを見つけます。注:現在のディレクトリは常にパスの前に実行されます)、使用されるAPI呼び出しに応じて、パスの前後で他の場所が検索されます。

@echo off
echo. 
echo PathFind - Finds the first file in in a path
echo ======== = ===== === ===== ==== == == = ====
echo. 
echo Searching for %1 in %path%
echo. 
set a=%~$PATH:1
If "%a%"=="" (Echo %1 not found) else (echo %1 found at %a%)

set /?ヘルプを参照してください。


6

Cygwinの軽量バージョンであるGOW(Windows上のGNU)を使用しています。こちらの GitHubから入手できます

GOW(Windows上のGNU)は、Cygwinに代わる軽量版です。便利なWindowsインストーラーを使用して、ネイティブのwin32バイナリとしてコンパイルされた約130の非常に便利なオープンソースUNIXアプリケーションをインストールします。オプションによっては100 MBをはるかに超えて実行できるCygwinとは対照的に、それは可能な限り小さく、約10 MBに設計されています。- 説明について(Brent R. Matzelle)

GOWに含まれるコマンドのリストのスクリーンショット:

ここに画像の説明を入力してください


5

Ned Batchelderに似たツールを作成しました。

PATHでの.dllおよび.exeファイルの検索

私のツールは主にさまざまなdllバージョンを検索するためのものですが、より多くの情報(日付、サイズ、バージョン)を表示しますが、PATHEXTは使用しません(ツールをすぐに更新したいと考えています)。


5

このWindowsの1つのライナーバッチファイルを投稿するだけです。

C:>type wh.cmd
@for %%f in (%*) do for %%e in (%PATHEXT% .dll .lnk) do for %%b in (%%f%%e) do for %%d in (%PATH%) do if exist %%d\%%b echo %%d\%%b

テスト:

C:>wh ssh
C:\cygwin64\bin\ssh.EXE
C:\Windows\System32\OpenSSH\\ssh.EXE

あなたがコードをラップでない場合は、非常にワンライナーsetlocal enableextensionsendlocal


2
私はそれを理解できるように複数行でそれを好むでしょう。;-)
Gringo Suave

4

Windows XPユーザー(whereコマンドが組み込まれていない)のために、「どこにあるか」というコマンドをrubygemという名前で書きましたwhichr

それをインストールするには、Rubyをインストールします。

その後

gem install whichr

次のように実行します。

C:> whichr cmd_here


3
Windows XPで何かを提案しているので、あなたは反対票を投じているのではないかと思います。
sebastian-c

1
反対投票はしませんでしたが、簡単なコマンドを実装するためにRubyをインストールすることも困難です。上記のforループがあり、バッチスクリプトに入れることができます。
Gringo Suave

2
詳細モードで実行すると、The Witcherのテーマ曲の冒頭の行が印刷されますか?;)
Agi Hammerthief

3

JPSoftのTCCおよびTCC / LEは、重要な機能を追加するCMD.EXEの代替品です。OPの質問に関連するのwhichは、TCCファミリコマンドプロセッサ用の組み込みコマンドです。


2

私はwhichかなり長い間npmからのモジュールを使用しており、非常にうまく機能します:https : //www.npmjs.com/package/which それは偉大なマルチプラットフォームの選択肢です。

これでwhich、Gitに付属するに切り替えました。/usr/bin通常はにあるGitからのパスをパスに追加するだけC:\Program Files\Git\usr\bin\which.exeです。whichバイナリはになりますC:\Program Files\Git\usr\bin\which.exe。高速で、期待どおりに機能します。


1

これを試して

set a=%~$dir:1
If "%for%"=="" (Echo %1 not found) else (echo %1 found at %a%)
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.