В чем разница между .com, .exe и .bat?

В чем разница между расширениями a.bat, a.com и a.exe?


person Sarfraz    schedule 22.01.2010    source источник


Ответы (9)


Первоначально файл .COM представлял собой буквальный BLOB-объект кода 8086 (то есть 16-битного x86). Он предназначен для загрузки по фиксированному адресу, и загрузчик сразу перейдет к первому байту своего адреса. Он также ограничен по размеру.

В файле .EXE содержится дополнительная информация о заголовке. Таким образом, у него есть необходимые структуры для таких вещей, как динамическое связывание, когда код из DLL может быть исправлен в пространстве памяти .EXE во время загрузки. Первоначально он пришел из DOS, но сегодня он используется в Windows.

Однако DOS и Windows в конечном итоге перешли к модели, в которой расширение файла в .COM и .EXE ничего не значило. Загрузчик программы сначала проверяет первые два байта файла. Если это строка MZ (легенда гласит, что это инициалы одного из первых сотрудников Microsoft), он будет рассматривать его как EXE, иначе он загрузит его, как если бы это был файл COM. Поскольку MZ не соответствует разумной инструкции x86 для запуска программы, им это может сойти с рук. Чистый эффект: в некоторых версиях DOS / Windows .EXE может называться .COM и наоборот. Например, во многих версиях DOS / Windows знаменитый COMMAND.COM на самом деле был EXE.

Я не уверен, насколько предыдущий абзац применим к версиям Windows для NT. Я предполагаю, что к настоящему времени они вообще отказались от .COM материала.

Наконец, файл .BAT - это список команд, которые нужно выполнить, как если бы вы вводили их в командной строке. Однако в наши дни большинство людей называют их .CMD.

person asveikau    schedule 22.01.2010
comment
MZ означает MORIN Zobowski - он разработал и реализовал первые версии заголовков EXE. :) - person this. __curious_geek; 22.01.2010
comment
Вы можете переименовать любой файл .exe в .com, и он будет работать нормально - без разницы. - person Nathan Osman; 22.01.2010
comment
То, что он работает, не означает, что он работает! EXE и COM - это как две совершенно разные модели автомобилей одного производителя. - person this. __curious_geek; 22.01.2010
comment
@ Джордж Эдисон - Я имел в виду, что если собрать mov ax, 4c00h; int 21h, затем назовите его .COM, он что-нибудь сделает, если вы его запустите? Это все еще работает на Win7? - person asveikau; 22.01.2010
comment
Я использую Vista :) Я имел в виду, что Windows будет загружать исполняемый файл на основе заголовков / содержимого, а не расширения. Это игнорируется - по крайней мере, когда дело доходит до exe / com. Что касается реальных приложений .com, ОС на базе NT не будет запускать 16-битные исполняемые файлы. - person Nathan Osman; 22.01.2010
comment
@ Джордж Эдисон Я почти уверен, что 32-битная NT по-прежнему будет запускать EXE-файлы Win16. - person asveikau; 22.01.2010
comment
Я считаю, что вызов 0 завершит программу, так как это задержка с дней CP / M. Ноль относится к первому 16-битному слову PSP, которое является int 20h (код выхода не используется, но приводит к завершению программы) - person Arthur Kalliokoski; 08.03.2010
comment
16-битные COM-файлы могут работать в NTVDM на всех 32-битных ОС Microsoft. 16-битная версия считалась устаревшей в 64-битной ОС. - person Prof. Falken; 27.07.2011
comment
Вопрос довольно расплывчатый, но более полный ответ может включать в себя, какой из трех выполняется, если они находятся в одном каталоге (предположительно .com, в зависимости от переменной окружения PATHEXT). - person Peter Mortensen; 06.06.2014
comment
В Visual Studio devenv.exe - это версия Visual Studio с графическим интерфейсом пользователя, а devenv.com - версия инструмента сборки из командной строки. Это действительно EXE, только что переименованный в .com. Но поскольку .com имеет приоритет в поиске PATH, ввод devenv в окне консоли запускает инструмент сборки из командной строки. Изящный трюк должен когда-либо иметь Windows GUI EXE, также имеющую версию для командной строки. - person selbie; 07.06.2014
comment
@KJ MZ - это Марк Збиковски. Парень, который разработал формат исполняемого файла EXE и его заголовок для DOS. en.wikipedia.org/wiki/Mark_Zbikowski - person this. __curious_geek; 06.06.2021
comment
@this .__ curious_geek, это правильно ZM = Zbikowski, Отметьте, как показано вверху справа, см. Magic Number в ссылке en.wikipedia. org / wiki / DOS_MZ_executable - person K J; 06.06.2021

.bat - это командный файл. Это интерпретируется.

.exe - это обычный исполняемый файл программы.

В файле .com, по крайней мере для MS-DOS, отсутствуют многие метаданные, и он загружается в определенное смещение в основной памяти. Он меньше, чем .exe

person Extrakun    schedule 22.01.2010

Я так понимаю, вы имеете в виду Windows?

"a.bat" должен быть пакетным файлом, эквивалентом файла сценария для Windows / DOS.

В наши дни "a.com" и "a.exe" считаются эквивалентными. Однако еще во времена Windows 3.x "com" файл был Исполняемый файл DOS, где исполняемый файл «exe» был переносимым исполняемым файлом или исполняемым файлом для Windows. . В наши дни это проблема, поскольку на вашем жестком диске могут существовать файлы в формате «www.example.com», и многие люди принимают такой файл за веб-ссылку. Хуже того, Windows обычно пытается запускать файлы «com» ​​перед файлами «exe».

person Medivh    schedule 22.01.2010
comment
Порядок приоритета при нахождении исполняемых файлов (support.microsoft.com/kb/35284) также иногда полезно, когда вы в безвыходном положении (хотя и редко). - person Liao; 22.01.2010
comment
Файлы .exe существовали до появления Windows. - person Ignacio Vazquez-Abrams; 22.01.2010
comment
Фактически, Portable Executables существовали до Windows. См. Википедию. - person Nathan Osman; 22.01.2010

Файл bat (ch) - это сценарий, который выполняется интерпретатором команд.

EXE-файл - это скомпилированный двоичный код, который будет выполняться непосредственно на процессоре.

Com-файл - это пережиток прошлого для создания небольшого exe-файла.

person Toon Krijthe    schedule 22.01.2010

.BAT - Пакетный файл: список команд (в основном текстовый файл с командами командной строки)

.COM - Исполняемый файл DOS, загружаемый в фиксированный блок памяти (происходит от до многозадачности)

.EXE - Исполняемый файл - стандартное приложение на платформе Windows

person mynameiscoffey    schedule 22.01.2010

Хотя файлы EXE и BAT часто служат схожей цели, они используют совершенно разные форматы файлов. Оба типа файлов могут использоваться для создания исполняемого содержимого в Windows, но файлы BAT ограничены в командах, которые они могут выполнять. Поскольку файлы BAT содержат читаемый человеком текст, их можно легко редактировать, и поэтому они часто используются для пользовательских задач сценариев. EXE-файлы, с другой стороны, содержат сложные двоичные данные, созданные с помощью компилятора. Поскольку файлы EXE поддерживают более сложные команды, чем файлы BAT, большинство приложений Windows сохраняются в формате EXE.

Я также искал тот же запрос и нашел кое-что, что вставлено здесь.

Перейдите по ссылке ниже, она будет вам полезна, она идеально отвечает на ваш вопрос:
Разница между .BAT и .EXE

person Shrikant    schedule 02.07.2013

На самом деле .com и .exe - это двоичные исполняемые файлы, тогда как .bat - это, по сути, командный файл. Теперь предположим, что у вас есть много файлов с одинаковыми именами, но с разными расширениями.

Например, a.com, a.exe и, если вы запускаете файл командной строки a. Сначала он выполнит a.com (только если он существует), иначе он запустит a.exe. Или скажите, что a.exe тоже нет, тогда он будет искать a.bat выполнение.

person user2804021    schedule 26.01.2014

  • Файл .BAT (сокращение от «batch») - это простой текстовый файл, содержащий ряд команд Windows.
  • Файл .EXE (сокращение от «исполняемый») - это двоичный файл, который содержит гораздо более сложный исполняемый двоичный код.
  • Файл .COM был исполняемым файлом DOS и в настоящее время аналогичен файлу .EXE.
person Sanchit    schedule 16.11.2014

.bat-файл напрямую влияет на производительность процессора. При этом файл .exe будет скомпилирован интерпретатором, а затем выполнен на ЦП.

person Baller    schedule 27.03.2013