Pourquoi un fichier est-il ouvert quand j'écris son nom, sans extension, dans la ligne de commande?

41

Sur Windows 10, j'ai un fichier appelé truffle.jsdans mon dossier actuel. J'écris truffledans la fenêtre de commande, en espérant appeler le truffleprogramme qui réside ailleurs sur mon chemin.

Au lieu de cela, truffle.jsest ouvert dans mon IDE préféré (les .jsfichiers sont associés à cet IDE). Je pensais que ce comportement n’est le même que pour les fichiers exécutables .bat, .comet .exe. Pourquoi ça se passe pour un .jsfichier?

Remarque: j'ai par la suite découvert que je n'avais pas truffledu 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.

ripper234
la source
1
Server 2008
n'exécutera
La duplication possible de l'invite
phuclv
Parce que Windows ouvrira tout fichier avec les extensions associées à une application. Cela vous évite d'avoir à taper c:\path\application.exe c:\path\filename.extplutôt que juste filename.
ashleedawg

Réponses:

75

Car %PATHEXT%est défini sur .COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH;.MSCpar 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 WHEREcommande pour vérifier quel chemin sera ouvert (par exemple where truffle), qui recherchera automatiquement à la fois% PATH% et% PATHEXT% de la même manière que CMD.

Daniel B
la source
3
Pour clarifier, vous voulez dire que Windows va prendre une entrée, ajoutez ces extensions de fichier à l'entrée pour voir si elle correspond, avant de regarder dans le PATH.
TankorSmash
9
Notez également que la logique d'origine de OP est valable - il s'agit d'exécutables (dans un sens du mot ...), certains d'entre eux sont également lisibles par l'homme.
Adonalsium
2
@TankorSmash Windows, comme dans le CreateProcesset je pense aussi dans les ShellExecute(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, CreateProcesset ShellExecute(Ex) sera annexé .exespécifiquement.
Bob
3
@ hBy2Py si un attaquant a suffisamment d'accès pour planter un fichier sur votre système et l'exécuter, vous êtes déjà vissé, peu importe l'extension du fichier ou la valeur de la %PATHEXT%variable d'environnement.
Zakinster
2
@ JustinC.B. Pommes et oranges. Notepad ++ n'est pas un produit Microsoft (et non fourni avec Windows, etc.). Nommer de côté, c’est autant (ou peu) de remplacement du Notepad que Sublime Text ou même du VSCode. PowerShell, en revanche, bénéficie de la première prise en charge et devient de plus en plus le produit par défaut (intégré) par rapport à l’invite de commande héritée, et la plupart des nouvelles commandes introduites au cours des dernières années sont exclusivement réservées à PowerShell.
Bob