Пакетные файлы Windows: .bat против .cmd?

693
задан Ross Ridge 18 October 2015 в 18:05
поделиться

8 ответов

От эта группа новостей, отправляющая Mark Zbikowski сам:

различия между.CMD и.BAT до CMD.EXE затронуты: С включенными расширениями СОЕДИНЯТЬ КАНАЛОМ/ДОБАВЛЯТЬ/ЗАПРАШИВАТЬ/УСТАНАВЛИВАТЬ/ПОМОЩНИК в.CMD файлах, установит ERRORLEVEL независимо от ошибки..BAT устанавливает ERRORLEVEL только на ошибках.

, Другими словами, если ERRORLEVEL установлен на не0 и затем Вы выполняете одну из тех команд, получающийся ERRORLEVEL будет:

  • оставленный в покое в его не0 значениях в .bat сбросе файла
  • к 0 в .cmd файле.
416
ответ дан Jean-François Corbett 18 October 2015 в 18:05
поделиться

Немного вне темы, но Вы рассмотрели Windows Scripting Host ? Вы могли бы найти его более хорошим.

2
ответ дан Peter Mortensen 18 October 2015 в 18:05
поделиться

Расширение не имеет никакого значения. Существуют незначительные различия между COMMAND.COM, обрабатывающим файл по сравнению с CMD.EXE

2
ответ дан Waldo 18 October 2015 в 18:05
поделиться

Вот компиляция проверенной информации из различных ответов и процитированных ссылок в этом потоке:

  1. command.com 16-разрядный командный процессор, представленный в MS-DOS, и также использовался в серии Win9x операционных систем.
  2. cmd.exe 32-разрядный командный процессор в Windows NT (64-разрядный Windows OSes также имеют 64-разрядную версию). cmd.exe никогда не была часть Windows 9x. Это произошло в версии 1.0 ОС/2, и версия ОС/2 cmd началась 16-разрядный (но была, тем не менее, полностью оперенная программа защищенного режима с командами как start). Windows NT наследовался cmd ОС/2, но версия Windows NT Win32 началась 32-разрядная. Хотя ОС/2 пошла 32-разрядная в 1992, cmd остался 16-разрядной ОС/2 1.x программа.
  3. ComSpec огибающая переменная определяет, какая программа запускается .bat и .cmd сценарии. (Запускающийся с WinNT это принимает значение по умолчанию к [1 110].)
  4. cmd.exe обратно совместимо с [1 112].
  5. сценарий А, который разработан для [1 113], можно назвать .cmd для предотвращения случайного выполнения в Windows 9x. Это расширение файла также относится ко времени версии 1.0 и 1987.

ОС/2, Вот список cmd.exe функции, которые не поддерживаются [1 116]:

  • Длинные имена файлов (превышающий эти 8,3 форматов)
  • заполнение клавишей Tab Истории команд
  • Символ ESC: ^ (Использование для: \ & | > < ^)
  • стек Directory: PUSHD / POPD
  • Целочисленная арифметика: SET /A i+=1
  • Поиск/Замена/Подстрока: SET %varname:expression%
  • замена Команды: FOR /F (существовал прежде, был улучшен)
  • Функции: CALL :label

Порядок Выполнения:

, Если и .bat и .cmd версии сценария (test.bat, test.cmd) находятся в той же папке и Вы выполняете сценарий без расширения (тест), по умолчанию .bat версия сценария будет работать, даже в 64-разрядном Windows 7. Порядком выполнения управляет переменная среды PATHEXT. См. Порядок, в котором Командная строка выполняет файлы для получения дополнительной информации.

Ссылки:

Википедия: Сравнение командных процессоров

393
ответ дан 18 revs, 8 users 80% 18 October 2015 в 18:05
поделиться

Я верю, изменяете ли Вы значение переменной среды ComSpec к %SystemRoot%system32\cmd.exe тогда, не имеет значения, если расширение файла является.BAT или.CMD. Я не уверен, но это может даже быть значением по умолчанию для WinXP и выше.

3
ответ дан Patrick Cuff 18 October 2015 в 18:05
поделиться

Нет - это не имеет значения в малейшем. На NT .bat и .cmd расширение оба заставляют процессор cmd.exe обрабатывать файл точно таким же образом.

Дополнительная интересная информация о command.com по сравнению с cmd.exe в WinNT-системах-классов от MS TechNet ( http://technet.microsoft.com/en-us/library/cc723564.aspx ):

Это поведение показывает довольно тонкую функцию Windows NT, который очень важен. 16-разрядная оболочка MS-DOS (COMMAND.COM), который поставлется с Windows NT, особенно разработана для Windows NT. Когда команда вводится для выполнения этой оболочкой, это на самом деле не выполняет его. Вместо этого это упаковывает текст команды и отправляет его в 32-разрядный командный процессор CMD.EXE для выполнения. Поскольку все команды на самом деле выполняются CMD.EXE (командный процессор Windows NT), 16-разрядная оболочка наследовала все функции и средства полной оболочки Windows NT.

25
ответ дан Michael Burr 18 October 2015 в 18:05
поделиться

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

8
ответ дан Lorenzo Boccaccia 18 October 2015 в 18:05
поделиться

разница:

.cmd файлы загружаются в память перед выполнением. Файлы .bat выполняют строку, читают следующую строку, выполняют эту строку ...

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

-10
ответ дан 22 November 2019 в 21:33
поделиться