No Windows 10, tenho um arquivo chamado truffle.js
na minha pasta atual. Eu escrevo truffle
na janela do cmd, esperando chamar o truffle
programa que reside em outro lugar no meu caminho.
Em vez disso, truffle.js
é aberto no meu IDE favorito (os .js
arquivos estão associados a esse IDE). Eu pensei que este comportamento é única como este para arquivos executáveis, .bat
, .com
e .exe
. Por que isso acontece com um .js
arquivo?
Nota: Descobri subseqüentemente que não tenho nenhum truffle
instalado no meu caminho, mas minha pergunta permanece: por que o Windows está concluindo a extensão que não especifiquei em um arquivo não executável?
Mesmo depois de instalar a trufa e reiniciar o cmd, não consigo executar a trufa real em uma pasta que contém um arquivo truffle.js
.
c:\path\application.exe c:\path\filename.ext
e não apenasfilename
.Respostas:
Porque
%PATHEXT%
está definido como.COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH;.MSC
padrão. Observe como ele contém.js
.Isso significa que, se você digitar um nome, o CMD procurará arquivos com essas extensões anexadas, nessa ordem, na pasta atual. Somente depois disso será considerado o que está dentro
%PATH%
. Este comportamento não pode ser alterado. Você pode modificar%PATHEXT%
, como qualquer outra variável de ambiente.Você pode usar o
WHERE
comando para verificar qual caminho seria aberto (por exemplowhere truffle
), que pesquisará automaticamente% PATH% e% PATHEXT% da mesma maneira que o CMD faria.fonte
CreateProcess
e também acho queShellExecute(Ex)
, não olha para o PATHEXT. A pesquisa de extensão é implementada apenas dentro dos shells padrão (cmd.exe e powershell.exe). Dito isto,CreateProcess
eShellExecute(Ex)
vai acrescentar.exe
especificamente.%PATHEXT%
variável de ambiente.