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


128

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

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

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

detect_program_path X.EXE

回答:


239

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

C:\>ここでメモ帳
C:\ Windows \ System32 \ notepad.exe
C:\ Windows \ notepad.exe

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

Linuxでは、同等のものはwhichコマンドです(例:)which ssh


2
+1!これがWindowsの一部である可能性があることを私は知りませんでした。:)
Zabba

1
貧しいXPユーザーには同等のものはありますか?
shahar_m

@shahar_m:マイケルバーから下のスクリプトを試してみましたか?組み込みではありませんが、必要な機能を果たす場合があります。
クリスシュミッチ

1
@Kenny:DLLの名前がわかっていると仮定すると、ListDLLsユーティリティ(technet.microsoft.com/en-us/sysinternals/bb896656)を使用できます。コマンドラインから実行listdlls -d foo.dllするだけで、モジュールがロードされているすべてのプロセスと、ロードされたモジュールへのフルパスが表示されます。または、Windowsファイル検索でファイル名を検索することもできます。
Chris Schmich、2015年

2
@ケニー:あなたが求めていることは、ここに投稿された答えとは大きく異なります。行った調査を含む新しいStack Overflow質問を作成し、それらへのリンクをこれらのコメントに投稿してください。
Chris Schmich、2015年

10

これは、次のような名前のファイルにコピーアンドペーストできる小さなcmdスクリプトですwhere.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

8

コメントに記載されているスレッドのように、get-commandPowershellでそれを解決することもできます。たとえば、次のように入力するget-command npmと、出力は次のようになります。

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


(get-command npm).Sourceすべてのプロパティのテーブル全体ではなく、npm(たとえば)へのパスだけで応答します。
デビッドブラウン
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.