Чому файл відкривається, коли я записую його ім'я без розширень у командному рядку?


41

У Windows 10 у мене є файл, який називається truffle.jsу моїй поточній папці. Я пишу truffleу вікні cmd, очікуючи викликати truffleпрограму, яка знаходиться в іншому місці мого шляху.

Натомість truffle.jsвідкривається в моєму улюбленому IDE ( .jsфайли пов'язані з цим IDE). Я вважав, що така поведінка є такою лише для виконуваних файлів .bat, .comта .exe. Чому це трапляється для .jsфайлу?

Примітка. Згодом я виявив, що у мене зовсім не truffleвстановлено на моєму шляху, але моє питання залишається: чому Windows завершує розширення, яке я не вказав у нездійсненому файлі?

Навіть після встановлення трюфеля та перезавантаження cmd я не можу змусити справжній трюфель запускатись у папці, що містить файл truffle.js.




Тому що Windows відкриє будь-який файл із розширеннями, які мають пов’язану програму. Це рятує вас від необхідності вводити, c:\path\application.exe c:\path\filename.extа не просто filename.
ashleedawg

Відповіді:


75

Тому що %PATHEXT%встановлено .COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH;.MSCза замовчуванням. Зверніть увагу, як він містить .js.

Це означає, що якщо ви введете ім'я, CMD шукатиме файли з доданими розширеннями в такому порядку в поточній папці. Тільки після цього він розгляне, що є %PATH%. Цю поведінку неможливо змінити. %PATHEXT%Однак ви можете змінювати , як і будь-яку іншу змінну середовища.

Ви можете скористатися WHEREкомандою, щоб перевірити, який шлях буде відкрито (наприклад where truffle), який автоматично шукатиме як% PATH%, так і% PATHEXT% так, як і CMD.


3
Щоб уточнити, ви маєте на увазі, що вікна візьмуть на вхід, додайте до розширення файлу ці вкладення, щоб побачити, чи збігається він, перш ніж шукати PATH.
TankorSmash

9
Також зауважте, що оригінальна логіка OP - це всі виконувані файли (у певному сенсі цього слова ...), деякі з них просто так, що вони читаються людиною.
Адоналізіум

2
@TankorSmash Windows, як CreateProcessі в ShellExecute(Ex)API, і я думаю, що також API, не дивиться на PATHEXT. Пошук розширень реалізується лише в оболонках за замовчуванням (cmd.exe і powershell.exe). Тим НЕ менше, CreateProcessі ShellExecute(Ex) буде додавати в .exeзокрема.
Боб

3
@ hBy2Py, якщо зловмисник має достатній доступ, щоб посадити файл у вашій системі та виконати його, ви вже накручені, незалежно від розширення файлу чи значення %PATHEXT%змінної середовища.
закінстер

2
@ JustinC.B. Яблука та апельсини. Блокнот ++ не є продуктом Microsoft (і не входить у комплект із Windows тощо). Відзначаючи вбік, це стільки (або мало) заміни для Блокнота, скільки піднесеного тексту або навіть VSCode. PowerShell, з іншого боку, надає підтримку сторонніх виробників і все більше стає типовим (пакетним) за замовчуванням командним рядком, і більшість нових команд, впроваджених за останні кілька років, є лише PowerShell.
Боб
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.