Пошук шляху програми, яка буде виконуватися з командного рядка в Windows


128

Скажіть, у мене в системі X.EXEвстановлена програма в папці c:\abcd\happy\. Папка знаходиться в системному шляху. Тепер припустимо, що в системі є ще одна програма, яка також називається X.EXE, але вона встановлена ​​в папці c:\windows\.

Чи можна швидко дізнатися з командного рядка, що якщо я введу, X.EXEхто з двох 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, і тому я не дивився в цьому напрямку! :)
Забба

1
Будь-який еквівалент для бідних користувачів xp?
shahar_m

@shahar_m: ви спробували сценарій нижче від Майкла Берра? Він не вбудований, але може робити все, що вам потрібно.
Кріс Шміх

1
@Kenny: Якщо припустити, що ви знаєте назву DLL, ви можете скористатися утилітою ListDLL ( technet.microsoft.com/en-us/sysinternals/bb896656 ). У командному рядку просто запустіть, listdlls -d foo.dllщоб побачити всі процеси, у яких завантажений модуль та повний шлях до завантаженого модуля. Крім того, ви можете просто виконати пошук файлу Windows для імені файлу.
Кріс Шміч

2
@Kenny: Те, що ви просите, сильно відрізняється від відповіді, розміщеної тут. Слід створити нове запитання щодо переповнення стека, якими дослідженнями ви займалися, та опублікуйте посилання на нього в цих коментарях.
Кріс Шміч

10

Ось невеликий сценарій cmd, який ви можете скопіювати-n-вставити у файл, який називається щось на зразок 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-commandв повноваженнях також може це розробити. Наприклад, ви можете ввести get-command npmта вихід такий:

введіть тут опис зображення


(get-command npm).Sourceвідповість лише шляхом шляху до npm (для прикладу) замість усієї таблиці всіх властивостей.
Девід Браун
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.