2009-09-30 17:06:38 +0000 2009-09-30 17:06:38 +0000
174
174

Jak znaleźć lokalizację programu wykonywalnego w systemie Windows?

Przypomniałem sobie, że użyłem narzędzia zwanego where, aby znaleźć lokalizacje dla dowolnego programu wykonywalnego w konsoli:

C:\Tmp\Where myTool.exe
 C:\Program Files\MyApp\myTools.exe
 ....

Teraz nie mogę znaleźć tego narzędzia. Nie jesteś pewien czy Windows ma wbudowane narzędzie do tego wyszukiwania?

Odpowiedzi (12)

380
380
380
2012-06-24 11:41:10 +0000

According to the StackOverflow answer at Is there an equivalent of ‘which’ on windows? , where.exe does this on Windows 7 and Windows Server 2003 and later:

Example

C:\> where ping

Output:

C:\Windows\System32\PING.EXE

In powershell use where.exe, Get-Command (or its abbreviation gcm), as where is the default alias for Where-Object.

23
23
23
2012-09-27 01:23:30 +0000

EDIT:Powinienem był dodać, jeśli nie możesz użyć polecenia WHERE z zachęty komend, sprawdź swoją zmienną PATH. (Po prostu użyj polecenia “ścieżka”.) Upewnij się, że C:\Windows\System32 jest w twojej ścieżce. Tam właśnie znajduje się polecenie “where.exe”.

WHERE jest poleceniem, którego szukasz! WHERE is like a cross between the UNIX shell built-in “which” and the “locate” command, in that it works for both command executables and regular files.

It’s also somewhat more complex than either of those two, although, in general a simple

WHERE <file>

It’s different from the “locate” command in that it’s not looking through the entire filesystem. Zamiast tego, domyślnym zachowaniem jest szukanie plików w dwóch lokalizacjach:

  • Bieżący katalog.
  • Wszystkie katalogi w zmiennej PATH.

Tak więc, każde polecenie, które można uruchomić bezpośrednio z wiersza poleceń bez określania katalogu, zostanie znalezione przez polecenie WHERE. (Ponieważ każde takie polecenie znajduje się już na liście zmiennych PATH)

Jeśli chcesz wyszukać tylko w zmiennej ścieżki poleceń, możesz użyć:

WHERE "$path:<search text>"

Jeśli natomiast chcesz znaleźć wszystkie kopie pliku w drzewie katalogów, możesz użyć:

WHERE /R <Top Level Directory> <search text>

Na koniec, WHERE znajdzie polecenia i wszelkie pliki z rozszerzeniem ze zmiennej PATHEXT bez podania rozszerzenia. Wszystkie inne pliki muszą być określone albo dokładnie, albo za pomocą znaków wieloznacznych.

Weźmy na przykład pliki “dxdiag.exe” i “dxdiagn.dll”. Zauważ następujące polecenie i jego wyjście:

WHERE /R C:\Windows dxdiag

C:\Windows\System32\dxdiag.exe
C:\Windows\SysWOW64\dxdiag.exe
C:\Windows\WinSxS\amd64_microsoft-windows-d..x-directxdiagnostic_31bf3856ad364e35_6.2.9200.16384_none_7c8d3f96e7882ec7\dxdiag.exe
C:\Windows\WinSxS\x86_microsoft-windows-d..x-directxdiagnostic_31bf3856ad364e35_6.2.9200.16384_none_206ea4132f2abd91\dxdiag.exe

Udaje mu się zwrócić wszystkie wersje “dxdiag.exe”, ponieważ “.exe” jest jednym z rozszerzeń zmiennej PATHEXT. (Uwaga: “WHERE dxdiag” would have worked as well, because C:\Windows\System32 is in the PATH variable.)

WHERE /R C:\Windows dxdiagn

on the other hand, fails to return any result, because “.dll” is not in PATHEXT.

W tym przypadku, spójrz na wynik, który dodanie symbolu wieloznacznego daje nam:

WHERE /R C:\Windows dxdiagn*

C:\Windows\System32\dxdiagn.dll
C:\Windows\System32\en-US\dxdiagn.dll.mui
C:\Windows\SysWOW64\dxdiagn.dll
C:\Windows\SysWOW64\en-US\dxdiagn.dll.mui
C:\Windows\WinSxS\amd64_microsoft-windows-d..iagnostic.resources_31bf3856ad364e35_6.2.9200.16384_en-us_daccd04369b09c70\dxdiagn.dll.mui
C:\Windows\WinSxS\amd64_microsoft-windows-d..x-directxdiagnostic_31bf3856ad364e35_6.2.9200.16384_none_7c8d3f96e7882ec7\dxdiagn.dll
C:\Windows\WinSxS\x86_microsoft-windows-d..iagnostic.resources_31bf3856ad364e35_6.2.9200.16384_en-us_7eae34bfb1532b3a\dxdiagn.dll.mui
C:\Windows\WinSxS\x86_microsoft-windows-d..x-directxdiagnostic_31bf3856ad364e35_6.2.9200.16384_none_206ea4132f2abd91\dxdiagn.dll

Z powodzeniem zwraca wszystkie wersje dxdiagn.dll.

Aby uzyskać więcej informacji, użyj “WHERE /?”. Mam nadzieję, że to pomoże!

10
10
10
2009-09-30 17:15:31 +0000

użyj dir:

cd \
dir /s /b mytool.exe

część cd użyjdir`:

cd \
dir /s /b mytool.exe

część zmienia się w korzeń dysku, aby zapewnić, że wyszukiwanie rozpoczyna się na szczycie hierarchii.

9
9
9
2014-04-07 12:52:13 +0000

Zauważ, że niektóre rzeczy mogą być nieco inne dla PowerShell:

PS C:\Users\Rob.wb-devel> where ping

PS C:\Users\Rob.wb-devel> where git

PS C:\Users\Rob.wb-devel> whereis.bat git
C:\Program Files (x86)\Git\cmd\git.exe

PS C:\Users\Rob.wb-devel> where.exe git
C:\Program Files (x86)\Git\cmd\git.exe
3
3
3
2009-09-30 19:26:11 +0000

W oknach możesz użyć darmowego narzędzia All search engine do wyszukiwania instantly dowolnego pliku po pełnej lub częściowej nazwie (jeśli twój dysk twardy jest sformatowany w ntfs).

3
3
3
2009-09-30 18:23:36 +0000

Frustrujące jest to, że nie jest on wbudowany jako proste polecenie.

Istnieje jednak kilka rozwiązań, jednym z nich jest plik wsadowy.

Stwórz plik wsadowy (który. bat) w następujący sposób:

@setlocal
@set P2=.;%PATH%
@for %%e in (%PATHEXT%) do @for %%i in (%~n1%%e) do @if NOT "%%~$P2:i"=="" echo %%~$P2:i

Wygląda w katalogu lokalnym, pobierze parametr pliku z rozszerzeniem lub bez rozszerzenia i zwróci pierwsze dopasowanie z bieżącego katalogu lub w PATH.

Następnie uruchom go jak which cmd.exe aby znaleźć plik cmd.exe, który zostanie wykonany po wpisaniu cmd.

1
1
1
2015-09-21 17:59:01 +0000

W PowerShell

(@($env:path.split(";")) + (pwd).Path) | where { dir $_ -ErrorAction SilentlyContinue |? Name -eq foo.exe }

Możesz łatwo przekonwertować to na Cmdlet.

Inny sposób na osiągnięcie tego, jak sugerowano w edycji:

get-command notepad.exe | select Source
1
1
1
2009-09-30 17:19:01 +0000

Jeśli chcesz tylko które , projekt GnuWin32 ma kilka narzędzi uniksowych z indywidualnymi instalatorami.

0
0
0
2020-01-19 15:42:25 +0000

Dla mnie to, co zadziałało, to

Get-Command chromedriver

który zwraca coś w rodzaju

CommandType Name Version Source
----------- ---- ------- ------
Application chromedriver.exe 0.0.0.0 C:\WINDOWS\chromedriver.exe

Wystarczy wymienić chromedriver na program, którego szukasz

0
0
0
2019-10-08 11:40:42 +0000

Heh, I just have to post this Windows’ one liner batch file:

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

A test:

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

Nie całkiem jeden liner, jeśli owinąć kod w setlocal enableextensions i endlocal, które są wymagane dla użytkowników, którzy nie mają rozszerzenia włączone domyślnie.

0
0
0
2019-12-04 17:04:50 +0000

Jeśli używasz Powershell, where jest czymś zupełnie innym niż cmd’s gdzie.

W powershell, wpisz:

(Get-Command -powershell.exe).Path
0
0
0
2013-04-24 16:35:10 +0000

Jeśli potrzebujesz tylko ścieżki, aby ją uruchomić, często lepiej jest użyć komendy startowej. Na przykład, możesz użyć “start chrome.exe” aby uruchomić Chrom{e|ium}, niezależnie od tego gdzie jest zainstalowany.