web-dev-qa-db-ja.com

Windowsのコマンドラインから実行するプログラムのパスを見つける

システムのフォルダーX.EXEにインストールされているプログラムc:\abcd\happy\があるとします。フォルダーはシステムパス上にあります。ここで、X.EXEとも呼ばれるシステムに別のプログラムがありますが、c:\windows\フォルダーにインストールされているとします。

X.EXEを入力すると、2つのX.EXEのどちらが起動されるかをコマンドラインからすばやく確認できますか? (ただし、タスクマネージャーでディレクトリ検索やプロセスの詳細を確認する必要はありません)。

たぶん、ある種の組み込みコマンドか、このようなことができるプログラムがありますか? :

detect_program_path X.EXE
118
Zabba

whereコマンドを使用します。リストの最初の結果が実行されます。

 C:\>ここでnotepad 
 C:\ Windows\System32\notepad.exe 
 C:\ Windows\notepad.exe 

このブログ投稿 によると、where.exeはWindows Server 2003以降に含まれているため、Vista、Win 7などで機能するはずです。

Linuxの場合、同等のものは which コマンドです。 which ssh

216
Chris Schmich

where.cmdなどの名前のファイルにコピーアンドペーストできる小さなcmdスクリプトを次に示します。

@echo off
rem - search for the given file in the directories specified by the path, and display the first match
rem
rem    The main ideas for this script were taken from Raymond Chen's blog:
rem
rem         http://blogs.msdn.com/b/oldnewthing/archive/2005/01/20/357225.asp
rem
rem
rem - it'll be Nice to at some point extend this so it won't stop on the first match. That'll
rem     help diagnose situations with a conflict of some sort.
rem

setlocal

rem - search the current directory as well as those in the path
set PATHLIST=.;%PATH%
set EXTLIST=%PATHEXT%

if not "%EXTLIST%" == "" goto :extlist_ok
set EXTLIST=.COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH
:extlist_ok

rem - first look for the file as given (not adding extensions)
for %%i in (%1) do if NOT "%%~$PATHLIST:i"=="" echo %%~$PATHLIST:i

rem - now look for the file adding extensions from the EXTLIST
for %%e in (%EXTLIST%) do @for %%i in (%1%%e) do if NOT "%%~$PATHLIST:i"=="" echo %%~$PATHLIST:i
9
Michael Burr

コメントで thread が言及されているように、powershellのget-commandも解決できます。たとえば、get-command npmと入力すると、出力は次のようになります。

enter image description here

5
Gearon