En Windows 10, tengo un archivo llamado truffle.js
en mi carpeta actual. Escribo truffle
en la ventana de cmd, esperando invocar el truffle
programa que reside en otra parte de mi camino.
En cambio, truffle.js
se abre en mi IDE favorito (los .js
archivos están asociados con ese IDE). Pensé que este comportamiento es solo así para los archivos ejecutables .bat
, .com
y .exe
. ¿Por qué sucede para un .js
archivo?
Nota: Posteriormente descubrí que no tengo nada truffle
instalado en mi ruta, pero mi pregunta sigue siendo: ¿por qué Windows está completando la extensión que no especifiqué en un archivo no ejecutable?
Incluso después de instalar trufa y reiniciar cmd, no puedo hacer que la trufa real se ejecute en una carpeta que contiene un archivo truffle.js
.
c:\path\application.exe c:\path\filename.ext
lugar de simplementefilename
.Respuestas:
Porque
%PATHEXT%
está configurado.COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH;.MSC
por defecto. Tenga en cuenta cómo contiene.js
.Eso significa que si escribe un nombre, CMD buscará archivos con estas extensiones agregadas, en ese orden, en la carpeta actual. Solo después de eso considerará lo que hay dentro
%PATH%
. Este comportamiento no se puede cambiar. Sin%PATHEXT%
embargo, puede modificar , como cualquier otra variable de entorno.Puede usar el
WHERE
comando para verificar qué ruta se abriría (por ejemplowhere truffle
), que buscará automáticamente tanto% PATH% como% PATHEXT% de la misma manera que lo haría CMD.fuente
CreateProcess
y creo que también lasShellExecute(Ex)
API, no mira PATHEXT. La búsqueda de extensiones solo se implementa dentro de los shells predeterminados (cmd.exe y powershell.exe). Dicho esto,CreateProcess
yShellExecute(Ex)
se anexará.exe
específicamente.%PATHEXT%
variable de entorno.