Sur Windows 10, j'ai un fichier appelé truffle.js
dans mon dossier actuel. J'écris truffle
dans la fenêtre de commande, en espérant appeler le truffle
programme qui réside ailleurs sur mon chemin.
Au lieu de cela, truffle.js
est ouvert dans mon IDE préféré (les .js
fichiers sont associés à cet IDE). Je pensais que ce comportement n’est le même que pour les fichiers exécutables .bat
, .com
et .exe
. Pourquoi ça se passe pour un .js
fichier?
Remarque: j'ai par la suite découvert que je n'avais pas truffle
du tout installé sur mon chemin, mais ma question demeure: pourquoi Windows complète-t-il l'extension non spécifiée sur un fichier non exécutable?
Même après l'installation de truffle et le redémarrage de cmd, je ne parviens pas à exécuter la vraie truffe dans un dossier contenant un fichier truffle.js
.
c:\path\application.exe c:\path\filename.ext
plutôt que justefilename
.Réponses:
Car
%PATHEXT%
est défini sur.COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH;.MSC
par défaut. Notez comment il contient.js
.Cela signifie que si vous tapez un nom, CMD recherchera les fichiers avec ces extensions ajoutées, dans cet ordre, dans le dossier actuel. Ce n’est qu’après cela qu’il examinera ce qui se passe
%PATH%
. Ce comportement ne peut pas être changé. Vous pouvez%PATHEXT%
cependant modifier , comme toute autre variable d'environnement.Vous pouvez utiliser la
WHERE
commande pour vérifier quel chemin sera ouvert (par exemplewhere truffle
), qui recherchera automatiquement à la fois% PATH% et% PATHEXT% de la même manière que CMD.la source
CreateProcess
et je pense aussi dans lesShellExecute(Ex)
API, ne regarde pas PATHEXT. La recherche d'extension n'est implémentée que dans les shells par défaut (cmd.exe et powershell.exe). Cela dit,CreateProcess
etShellExecute(Ex)
sera annexé.exe
spécifiquement.%PATHEXT%
variable d'environnement.