Znalezienie ścieżki programu, który będzie wykonywany z wiersza poleceń w systemie Windows


133

Powiedzmy, że mam program X.EXEzainstalowany w folderze c:\abcd\happy\w systemie. Folder znajduje się w ścieżce systemowej. Załóżmy teraz, że w systemie jest inny program, który również nazywa się X.EXE, ale jest zainstalowany w folderze c:\windows\.

Czy można szybko dowiedzieć się z wiersza poleceń, że jeśli wpiszę, X.EXEktóra z nich X.EXEzostanie uruchomiona? (ale bez konieczności szukania w katalogu lub przeglądania szczegółów procesu w Menedżerze zadań).

Może jakieś wbudowane polecenie lub jakiś program, który może zrobić coś takiego? :

detect_program_path X.EXE

Odpowiedzi:


242

Użyj wherepolecenia. Pierwszy wynik na liście to ten, który zostanie wykonany.

C: \> gdzie notatnik
C: \ Windows \ System32 \ notepad.exe
C: \ Windows \ notepad.exe

Zgodnie z tym wpisem na blogu , where.exejest dołączony do systemu Windows Server 2003 i nowszych, więc powinien działać tylko z Vista, Win 7 i in.

W systemie Linux odpowiednikiem jest whichpolecenie, np which ssh.


2
+1! Nigdy nie wiedziałem, że może to być część systemu Windows, więc nie patrzyłem w tym kierunku! :)
Zabba

1
Jakikolwiek odpowiednik dla biednych użytkowników XP?
shahar_m

@shahar_m: czy wypróbowałeś poniższy scenariusz Michaela Burra? Nie jest wbudowana, ale może zrobić to, czego potrzebujesz.
Chris Schmich

1
@Kenny: Zakładając, że znasz nazwę biblioteki DLL, możesz użyć narzędzia ListDLLs ( technet.microsoft.com/en-us/sysinternals/bb896656 ). Z wiersza poleceń po prostu uruchom, listdlls -d foo.dllaby zobaczyć wszystkie procesy, które mają załadowany moduł, i pełną ścieżkę do załadowanego modułu. Alternatywnie możesz po prostu wyszukać nazwę pliku w systemie Windows.
Chris Schmich

2
@Kenny: To, o co prosisz, bardzo różni się od odpowiedzi zamieszczonej tutaj. Powinieneś utworzyć nowe pytanie przepełnienia stosu z przeprowadzonymi badaniami i zamieścić link do niego w tych komentarzach.
Chris Schmich

10

Oto mały skrypt cmd, który możesz skopiować i wkleić do pliku o nazwie podobnej do 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

10

Jak wspomniany w komentarzu wątek , get-commandw PowerShell również można to rozwiązać. Na przykład możesz wpisać, get-command npma wynik jest następujący:

wprowadź opis obrazu tutaj


(get-command npm).Sourceodpowie tylko ścieżką do npm (na przykład) zamiast całej tabeli wszystkich właściwości.
David Brown
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.