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

Wie finde ich den Speicherort einer ausführbaren Datei in Windows?

Mir ist eingefallen, dass ich ein Tool namens where verwendet habe, um Speicherorte für beliebige ausführbare Programme wie dieses in einer Konsole zu finden:

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

Jetzt kann ich dieses Tool nicht mehr finden. Sind Sie nicht sicher, ob Windows ein eingebautes Tool für diese Suche hat?

Antworten (12)

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

Gemäß der StackOverflow-Antwort bei Gibt es ein Äquivalent von ‘welches’ auf Windows? , where.exe tut dies unter Windows 7 und Windows Server 2003 und höher:

Beispiel

C:\> where ping

Ausgabe:

C:\Windows\System32\PING.EXE

In der Power-Shell verwenden Sie where.exe, Get-Command (oder seine Abkürzung gcm), da where der Standardalias für Where-Object ist.

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

BEARBEITEN: Ich hätte hinzufügen sollen: Wenn Sie den WHERE-Befehl von der Befehlseingabe aus nicht verwenden können, überprüfen Sie Ihre PATH-Variable. (Verwenden Sie einfach den Befehl “path”.) Stellen Sie sicher, dass C:\Windows\System32 in Ihrem Pfad steht. Dort befindet sich “where.exe”.

WHERE ist der Befehl, nach dem Sie suchen! WHERE ist wie eine Kreuzung zwischen dem in der UNIX-Shell eingebauten “which”-Befehl und dem “locate”-Befehl, da er sowohl für ausführbare Befehlsdateien als auch für normale Dateien funktioniert.

Es ist auch etwas komplexer als einer der beiden, obwohl im allgemeinen ein einfacher

WHERE <file>

funktioniert. Stattdessen wird standardmäßig an zwei Stellen nach Dateien gesucht:

  • Das aktuelle Verzeichnis.
  • Alle Verzeichnisse in der PATH-Variablen.

Jeder Befehl, den Sie direkt von einer Eingabeaufforderung aus ausführen können, ohne das Verzeichnis anzugeben, wird also durch den WHERE-Befehl gefunden. (Weil ein solcher Befehl bereits in der Liste der Variablen PATH enthalten ist.)

Wenn Sie nur in der Befehlspfad-Variablen suchen möchten, können Sie verwenden:

WHERE "$path:<search text>"

Wenn Sie dagegen alle Kopien einer Datei in einem Verzeichnisbaum finden möchten, können Sie verwenden:

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

Schließlich findet WHERE Befehle und alle Dateien mit einer Erweiterung aus der Variablen PATHEXT, ohne die Erweiterung mit einzubeziehen. Alle anderen Dateien müssen entweder genau oder mit Platzhaltern angegeben werden.

Nehmen Sie zum Beispiel die Dateien “dxdiag.exe” und “dxdiagn.dll”. Beachten Sie den folgenden Befehl und seine Ausgabe:

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

Es gelingt, alle Versionen von “dxdiag.exe” zurückzugeben, da “.exe” eine der Erweiterungen in der Variablen PATHEXT ist. (Hinweis: “WHERE dxdiag” hätte auch funktioniert, weil C:\Windows\System32 in der PATH-Variable steht.)

WHERE /R C:\Windows dxdiagn

hingegen gibt kein Ergebnis zurück, weil “.dll” nicht in PATHEXT steht.

In diesem Fall sehen Sie sich das Ergebnis an, das das Hinzufügen eines Platzhalters ergibt:

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

Es gibt erfolgreich alle Versionen der dxdiagn.dll zurück.

Für weitere Informationen verwenden Sie “WHERE /? Hoffentlich hilft das!

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

verwenden Sie dir:

cd \
dir /s /b mytool.exe

der Teil cd verwenden Siedir`:

cd \
dir /s /b mytool.exe

der Teil ändert Sie zum Stammverzeichnis des Laufwerks, um sicherzustellen, dass die Suche an der Spitze der Hierarchie beginnt.

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

Beachten Sie, dass einige Dinge für PowerShell etwas anders sein können:

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

Auf Windows können Sie das kostenlose Dienstprogramm Alles Suchmaschine benutzen, um sofort nach jeder Datei mit vollem oder teilweisem Namen zu suchen (wenn Ihre Festplatte in ntfs formatiert ist).

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

Frustrierend, dass es nicht als einfacher Befehl eingebaut ist.

Es gibt jedoch mehrere Lösungen, eine davon ist eine Batch-Datei.

Erstellen Sie eine Batch-Datei (die. bat) wie folgt:

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

Diese sieht im lokalen Verzeichnis aus, nimmt einen Dateinamensparameter mit oder ohne Erweiterung und gibt die erste Übereinstimmung aus dem aktuellen Verzeichnis oder im PFAD zurück.

Führen Sie sie dann wie which cmd.exe aus, um die cmd.exe zu finden, die ausgeführt wird, wenn Sie cmd eingeben.

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

I

1
1
1
2009-09-30 17:19:01 +0000

Wenn Sie nur which wollen, hat das Projekt GnuWin32 eine Reihe von Unix-Utils mit individuellen Installationsprogrammen.

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

Was für mich funktioniert hat, war

Get-Command chromedriver

, was so etwas wie

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

zurückgibt. Ersetzen Sie einfach chromedriver durch das Programm, das Sie suchen

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

Heh, ich muss nur diese Ein-Zeilen-Stapeldatei von Windows posten:

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

Ein Test:

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

Nicht ganz ein einzeilig, wenn Sie den Code in setlocal enableextensions und endlocal einschließen, die für Benutzer erforderlich sind, die die Erweiterungen nicht standardmäßig aktiviert haben.

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

Wenn Sie Powershell verwenden, ist where etwas völlig anderes als cmd’s where.

Geben Sie in Powershell ein:

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

Wenn Sie nur den Pfad benötigen, um es zu starten, ist es oft besser, den Startbefehl zu verwenden. Beispielsweise können Sie “start chrome.exe” verwenden, um Chrom{e|ium} zu starten, unabhängig davon, wo es installiert ist.