17

В Windows * .exe, * .bat, * .cmd и * .com представляют программы или сценарии оболочки, которые можно запустить, просто дважды щелкнув по ним. Существуют ли другие расширения имени файла, указывающие на то, что файл является исполняемым?

РЕДАКТИРОВАТЬ: Когда я прыгаю в новый проект (или обратно в старый проект!), Одна из общих вещей, которые я хочу сделать при осмотре вокруг, это выяснить, какие инструменты есть. В Unix (который я использовал десятилетиями) есть бит выполнения, так что это так просто:

find . -executable -type f

Я подумал, что в Windows, которая, кажется, имеет гораздо более сложный механизм для «является ли этот исполняемый файл (и как я его выполняю)», будет относительно небольшое количество расширений имен файлов, которые будут служить примерно той же цели.

Для моего текущего проекта *.exe *.bat *.cmd почти наверняка достаточно, но я решил спросить, существует ли авторитетный список.

4 ответа4

26

Основные "исполняемые" файлы (те, которые Windows ожидает выполнить через PATH) хранятся в переменной окружения, называемой PATHEXT. Вы можете увидеть это из командной строки:

C:\>set PATHEXT

На моей машине я получаю это (WinXP):

PATHEXT=.COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH;.PSC1

Это не эксклюзивный список. Windows также будет выполнять другие файлы (например, экранные заставки имеют расширение .scr и являются исполняемыми файлами); Windows также разрешит выполнение других расширений файлов, но перечисленные выше являются исполняемыми расширениями по умолчанию .

2

В Windows, какие расширения файлов обозначают исполняемый файл?

Обозначать что?

Я знаю, что этот вопрос сейчас звучит немного запутанно, но вопрос имеет значение. Когда я объясню, почему это важно, вопрос станет более понятным.

Хотя ответ Кена Уайта о переменной PATHEXT (в "среде" командной строки) является хорошим и кратким ответом, и этот ответ может хорошо сработать для вас, ответ неполон. Неполная причина в том, что правильный ответ отличается в зависимости от того, что вы пытаетесь сделать.

Например, вы можете попробовать:

  • Запустите программу из "традиционной командной строки" ("CMD"), введя полное имя файла
  • Запустите программу из "традиционной командной строки" ("CMD"), введя базовое имя файла, но оставив его расширение
  • Используйте команду "start", встроенную в "традиционную командную строку" ("CMD")
  • Запустите программу из PowerShell
  • Запустите программу из меню "Выполнить", которое находится в меню "Пуск".
  • Запустите программу из Проводника, дважды щелкнув значок, связанный с файлом, заканчивающимся расширением.
  • Скажите Microsoft Internet Explorer, чтобы открыть загруженный файл
  • Запустите программу, используя функцию из Microsoft Windows API. (Это то, что конечные пользователи обычно не делают, но программисты могут сделать это, и поэтому информация относится к ним.)

Некоторые из этих методов запуска программ могут использовать разные методы определения того, какие расширения файлов могут поддерживаться. В частности, использование CMD может отличаться от меню «Выполнить».

Например, загадочный блог Уэса: Настройка Windows Run Command ... отмечает, что проверяются различные местоположения, включая раздел реестра.

Ответ также может зависеть от того, какая версия Microsoft Windows используется. В Windows 10 я просто набрал имя zip-файла в командной строке, и он открыл Windows Explorer. Кажется, я помню, что не работал в Windows XP (хотя в Windows XP я мог набрать «start filename.zip» и получить такой же эффект). Так что либо моя память неисправна, либо Microsoft пытается улучшить новые версии Windows. (Надеюсь, для меня последняя.)

В традиционной командной строке Windows 10 (с запуском "CMD"), когда я иду в местоположение (используя команду "CD") zip-файла и набираю «filename.zip», файл открывается. Когда я иду в это место и набираю "имя файла" (без расширения «.zip»), Windows не находит файл. Однако, если я запускаю « ECHO %PATHEXT% », а затем « SET PATHEXT=%PATHEXT%;.ZIP "(а затем снова" ECHO %PATHEXT% ", чтобы убедиться, что у меня был нужный эффект), затем я могу ввести" имя файла ", и в командной строке будет найден.ZIP файл Итак, это эффект переменной% PATHEXT%.

Вы можете увидеть другой список расширений, выполнив команду ASSOC . Например, выполнение этой команды показывает несколько строк вывода, включая следующее (в моей системе) - « .zip=CompressedFolder ». Затем я могу увидеть, что это работает, набрав " FTYPE | FIND /I "CompressedFolder" ". (Это предназначено для традиционной командной строки. PowerShell не понравятся эти неэкранированные кавычки.) (Если вы просто наберете « FTYPE » без остальной части этой командной строки, вы увидите намного больше вывода о других расширениях.)

Если я наберу " ASSOC | FIND /C "." " На моем компьютере с Windows 10, то обнаружу, что у меня 339 строк вывода, когда я проверяю связи файлов таким образом.

MS KB 162059 посвящена настройке того, как Internet Explorer открывает документы Office.

Таким образом, запрос списка исполняемых файлов по умолчанию слишком расплывчатый. Различные компоненты Microsoft Windows могут использовать разные ресурсы, поэтому вопрос должен быть более конкретным для точного ответа.

Вопрос упоминал использование Проводника, чтобы дважды щелкнуть по значку. Чтобы увидеть список используемых для этого исполняемых файлов, я думаю, вы захотите проверить реестр. Вы можете запустить это из командной строки:

reg query HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts

(Я не собираюсь перечислять их здесь. На моем компьютере с Windows 10 их 286.)

Это перечисляет расширения. Чтобы увидеть больше информации, включая информацию о расширениях:

reg query HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts /s

Итак, как вы можете видеть, этот, казалось бы, невинный вопрос может быть довольно сложной темой. Я полагаю, что я обосновал, почему вопрос должен быть достаточно конкретным, чтобы иметь возможность получить полный ответ, в котором полностью рассматривается, как один компонент Windows может определять расширения имени файла. В ореховой оболочке для Windows нет только одного единственного ответа, поскольку в Windows есть несколько компонентов, которые ведут себя по-разному. Надеюсь, я начал показывать это и указал на некоторые дополнительные ресурсы, которые показывают соответствующую информацию.

2

Распространенным для программ установки является .msi .

2

.vbs это скрипт. и .js

Но если вы знаете какую-то историю, вы сможете лучше понять контекст. Я полагаю, что если бы я не использовал компьютеры так долго, как раньше, я мог бы также сосредоточиться на знании того, какие расширения являются исполняемыми файлами ... потому что они довольно интересны и кажутся фундаментальными ... и я полагаю, что они являются ... Но обратите внимание, как со временем.После DOS COM сильно вымирал, просто в основном известно, я полагаю, после этого, если вообще, в windows 9x в оболочке command.com. Может быть, старые NT использовали их очень часто. Скрипты .. VBS пришло время win9x возможно .. так что появляются новые. PS1 даже новее, чем VBS.

,COM очень старый .. я не уверен, если Windows XP для примеров полагается на любой.COM-файлы. Но у него есть command.com больше для старых приложений, я думаю.

,BAT - это сценарий ... возвращение из дней DOS. все еще используется сегодня. ,VBS более современный, но.BAT все еще используется и не выйдет из употребления в ближайшее время, и люди разумно используют оба. Там естьCMD, который я не использовал, но, вероятно, не так уж отличается от всего. Есть ps1 (powershell. Это более современно, чем vbscript) Если мы говорим о скриптах в широком смысле, то есть.REG

Действительно термин исполняемый относится только к EXE и.COM(.COM, по сути, вымерли ... скорее, это вещь win9x (командная строка в win9x была command.com, cmd.exe не было), а файлы COM - вещь DOS. Но не CMD NT, например командной оболочкой NT, является cmd.exe, хотя, как уже упоминалось, в NT есть command.com, я думаю, для устаревших приложений, но NT, скорее всего, не полагается на него)

,MSC например start..run..services.msc Они не являются исполняемыми файлами ..Я предполагаю, что они являются своего рода сценарием .. services.msc, кажется, написан на xml) Но если это произойдет, то можно пойти еще дальше к несистемным вещам, и сказать, что HTML-страницы едины, потому что они интерпретируются .. как сценарий. Но не ОС, хотя .. ,CPL не являются скриптами .. посмотрите на них в блокноте. Люди склонны не думать о них как об исполняемых файлах или скриптах, возможно, потому что их пишут только разработчики MS. (или если это делают другие, то это очень необычно!)

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .