Unter Windows 10 befindet sich eine Datei truffle.js
in meinem aktuellen Ordner. Ich schreibe truffle
in das cmd-Fenster und erwarte, das truffle
Programm aufzurufen , das sich an einer anderen Stelle auf meinem Pfad befindet.
Wird stattdessen truffle.js
in meiner bevorzugten IDE geöffnet ( .js
Dateien sind mit dieser IDE verknüpft). Ich dachte, dieses Verhalten ist nur für ausführbare Dateien .bat
, .com
und so .exe
. Warum passiert das für eine .js
Datei?
Hinweis: Ich habe später festgestellt, dass truffle
auf 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
.
c:\path\application.exe c:\path\filename.ext
und nicht nur das Eingebenfilename
.Antworten:
Denn
%PATHEXT%
ist.COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH;.MSC
standardmäß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
WHERE
Befehl 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.quelle
CreateProcess
und ich denke auch denShellExecute(Ex)
APIs, schaut sich PATHEXT nicht an. Die Erweiterungssuche wird nur in den Standardshells (cmd.exe und powershell.exe) implementiert. Das heißt,CreateProcess
undShellExecute(Ex)
wird.exe
speziell angehängt .%PATHEXT%
Umgebungsvariablen.