Warum wird eine Datei geöffnet, wenn ich ihren Namen ohne Erweiterung in die Befehlszeile schreibe?

41

Unter Windows 10 befindet sich eine Datei truffle.jsin meinem aktuellen Ordner. Ich schreibe trufflein das cmd-Fenster und erwarte, das truffleProgramm aufzurufen , das sich an einer anderen Stelle auf meinem Pfad befindet.

Wird stattdessen truffle.jsin meiner bevorzugten IDE geöffnet ( .jsDateien sind mit dieser IDE verknüpft). Ich dachte, dieses Verhalten ist nur für ausführbare Dateien .bat, .comund so .exe. Warum passiert das für eine .jsDatei?

Hinweis: Ich habe später festgestellt, dass truffleauf meinem Pfad überhaupt nichts installiert ist, aber meine Frage bleibt: Warum vervollständigt Windows die Erweiterung, die ich für eine nicht ausführbare Datei nicht angegeben habe?

Selbst nach der Installation von Truffle und dem Neustart von cmd kann ich die echte Trüffel nicht in einem Ordner ausführen, der eine Datei enthält truffle.js.

ripper234
quelle
Weil Windows alle Dateien mit Erweiterungen öffnet, denen eine Anwendung zugeordnet ist. Es erspart Ihnen das Tippen c:\path\application.exe c:\path\filename.extund nicht nur das Eingeben filename.
Ashleedawg

Antworten:

75

Denn %PATHEXT%ist .COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH;.MSCstandardmäßig auf eingestellt. Beachten Sie, wie es enthält .js.

Das heißt, wenn Sie einen Namen eingeben, sucht CMD nach Dateien mit diesen Erweiterungen, die in dieser Reihenfolge im aktuellen Ordner angehängt sind. Erst danach wird geprüft, was drin ist %PATH%. Dieses Verhalten kann nicht geändert werden. Sie können sie %PATHEXT%jedoch wie jede andere Umgebungsvariable ändern .

Sie können den WHEREBefehl verwenden, um zu überprüfen, welcher Pfad geöffnet wird (z. B. where truffle). Dadurch werden sowohl% PATH% als auch% PATHEXT% automatisch wie bei CMD durchsucht.

Daniel B
quelle
3
Um dies zu verdeutlichen, bedeutet dies, dass Windows eine Eingabe vornimmt. Fügen Sie diese Dateierweiterungen der Eingabe hinzu, um zu prüfen, ob sie übereinstimmen, bevor Sie den PFAD durchsehen.
TankorSmash
9
Beachten Sie auch, dass die ursprüngliche Logik von OP zutrifft - dies sind alles ausführbare Dateien (im wahrsten Sinne des Wortes ...), von denen einige zufällig auch vom Menschen lesbar sind.
Adonalsium
2
@TankorSmash Windows, wie auch in den CreateProcessund ich denke auch den ShellExecute(Ex)APIs, schaut sich PATHEXT nicht an. Die Erweiterungssuche wird nur in den Standardshells (cmd.exe und powershell.exe) implementiert. Das heißt, CreateProcessund ShellExecute(Ex) wird.exe speziell angehängt .
Bob
3
@ hBy2Py Wenn ein Angreifer über genügend Zugriff verfügt, um eine Datei auf Ihrem System anzulegen und auszuführen, sind Sie bereits geschraubt, unabhängig von der Dateierweiterung oder dem Wert der %PATHEXT%Umgebungsvariablen.
Zakinster
2
@ JustinC.B. Äpfel und Orangen. Notepad ++ ist kein Microsoft-Produkt (und nicht im Lieferumfang von Windows usw. enthalten). Abgesehen davon ist es so viel (oder wenig) Ersatz für Notepad wie Sublime Text oder sogar VSCode. PowerShell hingegen wird von Erstanbietern unterstützt und wird zunehmend zum (gebündelten) Standard für die ältere Eingabeaufforderung. Viele der neuen Befehle, die in den letzten Jahren eingeführt wurden, sind nur für PowerShell bestimmt.
Bob