En Windows 10, tengo un archivo llamado truffle.jsen mi carpeta actual. Escribo truffleen la ventana de cmd, esperando invocar el truffleprograma que reside en otra parte de mi camino.
En cambio, truffle.jsse abre en mi IDE favorito (los .jsarchivos están asociados con ese IDE). Pensé que este comportamiento es solo así para los archivos ejecutables .bat, .comy .exe. ¿Por qué sucede para un .jsarchivo?
Nota: Posteriormente descubrí que no tengo nada truffleinstalado 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.extlugar de simplementefilename.Respuestas:
Porque
%PATHEXT%está configurado.COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH;.MSCpor 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
WHEREcomando 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
CreateProcessy 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,CreateProcessyShellExecute(Ex)se anexará.exeespecíficamente.%PATHEXT%variable de entorno.