it-swarm.com.de

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

Ich erinnerte mich, dass ich ein Tool namens where verwendet habe, um Speicherorte für 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 finden. Sind Sie sich nicht sicher, ob Windows ein integriertes Tool für diese Suche hat?

128
David.Chu.ca

Ich denke, Sie denken vielleicht an den Befehl which in Linux.

$ which bash
/bin/bash

Mir ist kein gleichwertiges Tool in Windows bekannt.

BEARBEITEN: Ich habe mich gerade daran erinnert, dass es ein Paket mit dem Namen Unix Utils für Windows gibt, das diese Funktionalität für Sie bereitstellen würde.

3
djhowell

Laut der StackOverflow-Antwort unter Gibt es ein Äquivalent von 'which' unter Windows? , where.exe führt dies unter Windows 7 und Windows Server 2003 und höher aus:

Beispiel

C:\> where ping

Ausgabe:

C:\Windows\System32\PING.EXE
301
Simon D

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

WO ist der gesuchte Befehl? WHERE ist eine Kreuzung zwischen dem in der UNIX-Shell integrierten Befehl "which" und dem Befehl "locate", da es sowohl für ausführbare Befehlsdateien als auch für reguläre Dateien funktioniert.

Es ist auch etwas komplexer als eines der beiden, obwohl es im Allgemeinen ein einfaches ist

WHERE <file>

wird funktionieren.

Es unterscheidet sich vom Befehl "locate" darin, dass nicht das gesamte Dateisystem durchsucht wird. Stattdessen wird standardmäßig an zwei Speicherorten nach Dateien gesucht:

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

Jeder Befehl, den Sie direkt an einer Eingabeaufforderung ausführen können, ohne das Verzeichnis anzugeben, wird vom WHERE-Befehl gefunden. (Da sich ein solcher Befehl bereits in der PATH-Variablenliste befindet.)

Wenn Sie only in der Befehlspfadvariablen suchen möchten, können Sie Folgendes verwenden:

WHERE "$path:<search text>"

Wenn Sie dagegen alle Kopien einer Datei in einem Verzeichnisbaum suchen möchten, können Sie Folgendes 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 einzuschließen. Alle anderen Dateien müssen entweder exakt oder mit Wildcards 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 ist erfolgreich, alle Versionen von "dxdiag.exe" zurückzugeben, da ".exe" eine der Erweiterungen in der PATHEXT-Variablen ist. (Hinweis: "WHERE dxdiag" hätte auch funktioniert, da sich C:\Windows\System32 in der PATH-Variablen befindet.)

WHERE /R C:\Windows dxdiagn

andernfalls wird kein Ergebnis zurückgegeben, da ".dll" not in PATHEXT ist.

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

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 all Versionen von dxdiagn.dll zurück.

Verwenden Sie für weitere Informationen "WHERE /?". Hoffe das hilft!

19
geo

benutze dir:

cd \
dir /s /b mytool.exe

mit dem Teil cd \ wechseln Sie in das Stammverzeichnis des Laufwerks, um sicherzustellen, dass die Suche ganz oben in der Hierarchie beginnt.

10
John T

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
7
Rob Jens

Es ist frustrierend, dass es sich nicht um einen einfachen Befehl handelt.

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

Erstellen Sie eine Batch-Datei (which.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 

Dieser sucht im lokalen Verzeichnis, nimmt einen Dateinamenparameter mit oder ohne Erweiterung und gibt die erste Übereinstimmung aus dem aktuellen Verzeichnis oder im PATH zurück.

Führen Sie es dann wiewhich cmd.exeaus, um die cmd.exe zu finden, die ausgeführt wird, wenn Sie cmd eingeben.

3
b w

Unter Windows können Sie das kostenlose Dienstprogramm Everything search engine verwenden, um sofort nach einer beliebigen Datei nach vollständigem oder teilweisem Namen zu suchen (wenn Ihre Festplatte in ntfs formatiert ist).

3
harrymc

In PowerShell

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

Sie können dies problemlos in ein Cmdlet konvertieren.

Ein anderer Weg, dies zu erreichen, wie in einer Bearbeitung vorgeschlagen:

get-command notepad.exe | select Source
1
Anupam

Wenn Sie nur welches wollen, enthält das GnuWin32 - Projekt eine Reihe von Unix-Utils mit einzelnen Installationsprogrammen.

1
Justin Love

Wenn Sie nur den Pfad zum Starten benötigen, ist es oft besser, den Befehl start zu verwenden. Sie können beispielsweise "start chrome.exe" verwenden, um Chrom {e | ium} zu starten, unabhängig davon, wo es installiert ist.

0