Ich habe das folgende Experiment versucht.
Bevor ich anfange, habe ich die PATH-Variable von cmd überprüft, die den folgenden Wert hat:
Path=C:\Program Files (x86)\Intel\iCLS Client\;C:\Program Files\Intel\iCLS Client\;%SystemRoot%\system32;%SystemRoot%;%SystemRoot%\System32\Wbem;%SYSTEMROOT%\System32\WindowsPowerShell\v1.0\;C:\ProgramData\Lenovo\ReadyApps;C:\Program Files\Microsoft SQL Server\110\Tools\Binn\;C:\Program Files\Microsoft SQL Server\120\Tools\Binn\;C:\Program Files (x86)\Windows Live\Shared;C:\Program Files (x86)\Skype\Phone\;C:\Program Files (x86)\Intel\Intel(R) Management Engine Components\DAL;C:\Program Files\Intel\Intel(R) Management Engine Components\DAL;C:\Program Files (x86)\Intel\Intel(R) Management Engine Components\IPT;C:\Program Files\Intel\Intel(R) Management Engine Components\IPT;C:\Program Files (x86)\Calibre2\;C:\Program Files\Intel\WiFi\bin\;C:\Program Files\Common Files\Intel\WirelessCommon\;
Zuerst dachte ich, dass cmd nur nach ausführbaren Dateien in den Verzeichnissen sucht, die in der PATH-Variablen enthalten sind, also habe ich zufällig eine Anwendung ausgewählt - winword.exe (Microsoft Word) und versucht, sie über die Befehlszeile zu starten:
start winword
Aber zu meiner Überraschung startet das Programm! Der Grund, warum ich überrascht bin, ist, dass ich alle Verzeichnisse in der PATH-Variablen nach der Exe-Datei namens 'winword' durchsucht habe, aber alle meine Suchanfragen waren leer!
Ich bin daher zu dem Schluss gekommen, dass die Eingabeaufforderung andere Stellen als die in der PATH-Variablen angegebenen durchsucht haben muss, um nach ausführbaren Dateien zu suchen.
Das nächste, was ich tat, war natürlich, nach dem genauen Speicherort zu suchen, an dem sich die ausführbare Datei "winword" befindet. Es stellt sich heraus, dass sich winword.exe hier befindet:
C:\Program Files\Microsoft Office 15\root\office15
Daraus ergibt sich die Idee, dass CMD beim Ausführen des Befehls 'start' möglicherweise automatisch ProgramFiles und ProgramFiles (x86) (und alle ihre Unterverzeichnisse) durchsucht? Aus diesem Grund habe ich versucht, eine andere auf meinem Computer installierte Anwendung, Audacity, mit der exe-Datei zu starten, die sich unter folgender Adresse befindet:
C:\Program Files (x86)\Audacity
Zu meiner Überraschung konnte Audacity erneut nicht gestartet werden, als ich Folgendes eingab:
start audacity
an der Befehlszeile.
Ich habe dann das Verzeichnis mit audacity.exe zu PATH hinzugefügt:
set path=%path%;C:\Program Files (x86)\Audacity
Danach habe ich versucht, Audacity erneut zu starten:
start audacity
Nun, nicht überraschend, startete Audacity.
Ich möchte wissen, wo genau die Eingabeaufforderung nach ausführbaren Dateien sucht. Warum wird winword.exe auch dann gestartet, wenn das Verzeichnis, in dem es sich befindet, nicht Teil von PATH ist, aber das Gleiche gilt nicht für audacity.exe?
Ich habe auch andere Anwendungen ausprobiert. Chrome und Firefox funktionieren, wenn ich den Startbefehl verwende.
UPDATE: Ich verwende Windows Version 6.3.9600 (Windows 8.1)
Antworten:
Der Grund dafür
winword.exe
ist, dass ein Registrierungsschlüssel vorhanden ist, der den Pfad zu Microsoft Word (Winword.exe) definiert. Ein ähnlicher Schlüssel ist für Firefox.exe und Chrome.exe vorhanden, wenn diese Anwendungen installiert sind.HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths
HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths
System-PATH-Variable, Benutzer-PATH-Variable und die verschiedenen Schlüssel darin
..\App Paths
. Ich konnte bestätigen, dass Audacity bei der Installation keinen Schlüssel für sich selbst erstellt.Quelle: Anwendungsregistrierung
quelle
Wenn Sie an der Eingabeaufforderung nur eingeben
WinWord
, schlägt die Ausführung fehl.Wenn Sie eingeben, wird
START WinWord
es ausgeführt.Der
Start
Befehl ist hier der Schlüssel.Wenn Sie versuchen, eine Datei über den Befehl start auszuführen, führt die Eingabeaufforderung keine Suche durch. Stattdessen übergibt es den Dateinamen (und die Argumente) an Windows selbst (über den ShellExecuteEx-API-Aufruf), das dann nach dem Speicherort der Datei suchen muss. Es gibt mehrere Orte, die in der folgenden Reihenfolge durchsucht werden:
Das aktuelle Arbeitsverzeichnis.
Windows
Nur das Verzeichnis (es werden keine Unterverzeichnisse durchsucht).Das
Windows\System32
Verzeichnis.In der
PATH
Umgebungsvariablen aufgelistete Verzeichnisse .Empfohlen:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths
WinWord
ist in diesem Registrierungsschlüssel. Der Schlüssel ist da, umPATH
nicht zu lang zu werden.quelle
Das Programm (wenn Sie seinen Modulnamen ohne Laufwerk / Pfad in der Eingabeaufforderung angeben) im Windows-Befehlsprozessor (CMD.EXE) kann beim Auffinden gestartet werden:
nach PATH-Umgebungsvariable (sowohl die ausführbare Datei als auch der gleichnamige Hardlink / Softlink / Shortcut)
von DOSKEY alias
nach Anwendungspfad von
HKLM\Software\Microsoft\Windows\CurrentVersion\App Paths
oderHKCU\Software\Microsoft\Windows\CurrentVersion\App Paths
(bei Verwendung desstart
Befehls)Mit diesem Wissen (insbesondere dem letzten) können Sie Ihre eigenen, für Sie passenden Aliase erstellen. Zum Beispiel können Sie
HKCU\Software\Microsoft\Windows\CurrentVersion\App Paths\au.exe
mit dem Standardwert von erstellenC:\Program Files (x86)\Audacity\Audacity.exe
und diese Anwendung starten, indem Sie einfach diestart au
Eingabeaufforderung eingeben .quelle
Während die anderen Antworten wahrscheinlich der spezifische Grund für Ihren Fall sind, gibt es auch eine andere Antwort auf Ihre Frage, die für einige andere Anwendungen der Fall sein könnte: an derselben Stelle, an der Sie gesucht haben, aber mit unterschiedlichen Dateierweiterungen.
Sie haben ausdrücklich gesagt, dass Sie nach Dateien mit der Erweiterung suchen
exe
. Windows versucht auch, Dateien mit anderen Erweiterungen auszuführen.Eine weitere Umgebungsvariable, die beim Ausführen eines Befehls ins Spiel kommt, ist die Variable
PATHEXT
. Dies ist eine;
begrenzte Liste von Dateierweiterungen, die ausgeführt werden sollen. Wenn Sie Echo sehenPATHEXT
Sie möglicherweise etwas wie.COM;.EXE;.BAT;.CMD;.VBS;
... (etc.). Einige Anwendungen verwenden diese anderen Dateitypen als Endbenutzer-Einstiegspunkt. Es ist viel seltener, aber es passiert. Ich habe mehrere kommerzielle Hauptprodukte verwendet, die von.BAT
Skripten ausgehen. Um eines davon als Beispiel zu verwenden, kann ich es mit dem Befehl startenstandalone
, obwohl es keinen gibtstandalone.exe
... stattdessen hat es einenstandalone.bat
.Einige der Erweiterungen, die
PATHEXT
ich im Moment ansehe, habe ich noch nie in einer Anwendung verwendet. Ones , dass ich habe mehr in viel häufig laufen (aber offensichtlich nicht so viel wieexe
) ist:.com
,.bat
,.vbs
,.js
,.jar
. Die ersten beiden sind Windows-Batch-Skriptdateien, und die anderen drei sind Dateitypen für bestimmte Programmiersprachen, die von Skripten oder virtuellen Maschinen anstelle vonexe
s (Visual Basic, Javascript und Java) ausgeführt werden.quelle
PATHEXT
undPATH
, beide im Zusammenhang damit stehen, Dinge zum Laufen zu bringen, sind sie in ihren jeweiligen Aufgaben etwas orthogonal.PATH
Gibt an, wo nach auszuführenden Dingen gesucht werden soll, und fordert das OP an, währendPATHEXT
angegeben wird, was ausgeführt werden kann.start winword
weist die Eingabeaufforderung nicht an, zu startenwinword
. Es weist die Eingabeaufforderung an,start
mit Argument zu startenwinword
.Start
verwendet seine eigenen Methoden, um zu findenwinword
.winword
Fordert die Eingabeaufforderung einfach zum Starten aufwinword
. Und wenn Sie das versuchen,winword
wirdPATH
es nicht gestartet , da es nicht auf dem ist.quelle