От эта группа новостей, отправляющая Mark Zbikowski сам:
различия между.CMD и.BAT до CMD.EXE затронуты: С включенными расширениями СОЕДИНЯТЬ КАНАЛОМ/ДОБАВЛЯТЬ/ЗАПРАШИВАТЬ/УСТАНАВЛИВАТЬ/ПОМОЩНИК в.CMD файлах, установит ERRORLEVEL независимо от ошибки..BAT устанавливает ERRORLEVEL только на ошибках.
, Другими словами, если ERRORLEVEL установлен на не0 и затем Вы выполняете одну из тех команд, получающийся ERRORLEVEL будет:
Немного вне темы, но Вы рассмотрели Windows Scripting Host ? Вы могли бы найти его более хорошим.
Расширение не имеет никакого значения. Существуют незначительные различия между COMMAND.COM, обрабатывающим файл по сравнению с CMD.EXE
Вот компиляция проверенной информации из различных ответов и процитированных ссылок в этом потоке:
command.com
16-разрядный командный процессор, представленный в MS-DOS, и также использовался в серии Win9x операционных систем. 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 программа. ComSpec
огибающая переменная определяет, какая программа запускается .bat
и .cmd
сценарии. (Запускающийся с WinNT это принимает значение по умолчанию к [1 110].) cmd.exe
обратно совместимо с [1 112]. .cmd
для предотвращения случайного выполнения в Windows 9x. Это расширение файла также относится ко времени версии 1.0 и 1987. ОС/2, Вот список cmd.exe
функции, которые не поддерживаются [1 116]:
^
(Использование для: \ & | > < ^
) PUSHD
/ POPD
SET /A i+=1
SET %varname:expression%
FOR /F
(существовал прежде, был улучшен) CALL :label
Порядок Выполнения:
, Если и .bat и .cmd версии сценария (test.bat, test.cmd) находятся в той же папке и Вы выполняете сценарий без расширения (тест), по умолчанию .bat версия сценария будет работать, даже в 64-разрядном Windows 7. Порядком выполнения управляет переменная среды PATHEXT. См. Порядок, в котором Командная строка выполняет файлы для получения дополнительной информации.
Ссылки:
Википедия: Сравнение командных процессоров
Я верю, изменяете ли Вы значение переменной среды ComSpec к %SystemRoot%system32\cmd.exe тогда, не имеет значения, если расширение файла является.BAT или.CMD. Я не уверен, но это может даже быть значением по умолчанию для WinXP и выше.
Нет - это не имеет значения в малейшем. На 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.
все работающее в пакете должно работать в cmd; cmd обеспечивает некоторые расширения для управления средой. также, cmd выполняется в новом cmd интерпретаторе и таким образом должен быть быстрее (не примечательный на коротких файлах) и более стабильный, когда летучая мышь работает под эмулированной средой NTVDM на 16 битов
разница:
.cmd файлы загружаются в память перед выполнением. Файлы .bat выполняют строку, читают следующую строку, выполняют эту строку ...
вы можете столкнуться с этим, когда выполняете файл сценария, а затем редактируете его до того, как он завершится. bat файлы будут испорчены, а файлы cmd - нет.