В Windows 10 у меня есть файл, который называется truffle.js
в моей текущей папке. Я пишу truffle
в окне cmd, ожидая вызова truffle
программы, которая находится в другом месте моего пути.
Вместо этого truffle.js
открывается в моей любимой IDE ( .js
файлы связаны с этой IDE). Я думал, что это поведение только для исполняемых файлов .bat
, .com
и .exe
. Почему это происходит для .js
файла?
Примечание. Впоследствии я обнаружил, что truffle
на моем пути вообще ничего не установлено, но остается вопрос: почему Windows завершает расширение, которое я не указал для неисполняемого файла?
Даже после установки трюфеля и перезапуска cmd я не могу заставить настоящий трюфель запускаться в папке, содержащей файл truffle.js
.
c:\path\application.exe c:\path\filename.ext
а не простоfilename
.Ответы:
Потому
%PATHEXT%
что установлено.COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH;.MSC
по умолчанию. Обратите внимание, как оно содержится.js
.Это означает, что если вы введете имя, CMD будет искать файлы с этими расширениями, добавленными в указанном порядке в текущую папку. Только после этого он будет считать, что в
%PATH%
. Это поведение не может быть изменено. Вы можете изменить%PATHEXT%
, как и любую другую переменную окружения.Вы можете использовать
WHERE
команду, чтобы проверить, какой путь будет открыт (напримерwhere truffle
), который будет автоматически искать и% PATH%, и% PATHEXT% так же, как CMD.источник
CreateProcess
и, я думаю, иShellExecute(Ex)
API, не смотрит на PATHEXT. Поиск по расширению реализован только в оболочках по умолчанию (cmd.exe и powershell.exe). Тем не менее,CreateProcess
иShellExecute(Ex)
будет добавлять в.exe
частности.%PATHEXT%
переменной среды.