Пакетные файлы Windows: .bat против .cmd? - PullRequest
684 голосов
/ 29 сентября 2008

Насколько я понимаю, .bat - это старое 16-битное соглашение об именах, а .cmd - для 32-битной Windows, то есть начиная с NT. Но я продолжаю видеть файлы .bat везде, и они, кажется, работают точно так же, используя любой суффикс. Предполагая, что мой код никогда не должен будет выполняться на чем-то более старом, чем NT, действительно ли имеет значение, каким образом я называю свои командные файлы, или есть какие-то gotcha , ожидающие меня с использованием неправильного суффикса?

Ответы [ 14 ]

3 голосов
/ 29 сентября 2008

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

2 голосов
/ 29 сентября 2008

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

0 голосов
/ 05 ноября 2016

Вот одно различие, которое я обнаружил: EnableDelayedExpansion - это требуется в .cmd файлах.
Где, как в случае .bat файлов, это неявно по умолчанию. ( Windows 10 )

dir *? | find /i "FOOBAR"
if ERRORLEVEL 0             (
set result="found"  ) else  (
set result="not found"  )
echo %result%

Это работает в .bat, но всегда found в случае .cmd файла.
Изменение line 2 на следующее заставляет его работать как положено:

if %ERRORLEVEL% equ 0       (

И, наконец, для файла .cmd это работает правильно:

setLocal EnableDelayedExpansion
...
if !ErrorLevel! equ 1       (
...
0 голосов
/ 04 апреля 2010

разница:

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...