Windows - пакетні файли windows

Як я розумію. bat - це старе 16-бітове угоду про імена, а .cmd - для 32-розрядної Windows, тобто, починаючи з NT. Але я як і раніше бачу файли .bat всюди, і вони, схоже, працюють точно так же, використовуючи будь-який суфікс. Припускаючи, що моєму коду ніколи не знадобиться працювати на чомусь старше NT, чи дійсно має значення, як я називаю свої командні файли, або є якийсь getcha. очікує мене, використовуючи неправильний суфікс?

Нова цитата з Вікіпедії

Єдине відоме відмінність між .cmd І .bat - це те, що в .cmd введіть змінну ERRORLEVEL Зміни навіть при успішній команді На які впливають Командні розширення (Коли включені розширення команд) Тоді як в .bat-файлах ERRORLEVEL Мінлива змінюється тільки при помилках.

Джерело цитованої вище Вікіпедії фактично заснований на Публікація цієї групи новин.

Відмінності між .CMD і .BAT в CMD.EXE. З увімкненими розширеннями, PATH / APPEND / PROMPT / SET / ASSOC в .CMD Файли встановлять ERRORLEVEL незалежно від помилки. BAT встановлює ERRORLEVEL Тільки при помилках.

Ось компіляція перевіреної інформації з різних відповідей і цитованих посилань в цьому потоці:

Ось список функцій cmd.exe. які не підтримуються command.com:

  • Довгі імена файлів (перевищують формат 8.3)
  • Історія команд
  • завершення вкладки
  • Символ Escape: ^ (Використовуйте для: \ |> <^ )
  • Стек каталогу: PUSHD / POPD
  • Цілочисельна арифметика: SET / A i + = 1
  • Пошук / Заміна / Підрядок: SET% varname: expression%
  • Підстановка команд: FOR / F (існувала до, була поліпшена)
  • Функції: CALL: label

Якщо обидві версії сценарію .bat і .cmd сценарію (test.bat, test.cmd) знаходяться в одній папці, і ви запускаєте скрипт без розширення (тесту), за замовчуванням версія .bat скрипта буде Навіть в 64-бітної Windows 7. Порядок виконання контролюється змінної середовища PATHEXT. Див. Порядок, в якому Command Prompt виконує файли для більш докладної інформації.

Ні - це анітрохи не важливо. На NT розширення .bat і .cmd змушує процесор cmd.exe обробляти файл точно так же.

Це поведінка показує досить тонкий Особливість Windows NT, яка дуже важливий. 16-розрядна оболонка MS-DOS (COMMAND.COM), який поставляється з Windows NT спеціально розроблений для Windows NT. Коли вводиться команда для Виконання цієї оболонкою, це не Фактично виконати його. Замість цього Упаковує текст команди і відправляє її В 32-розрядну командну оболонку CMD.EXE для виконання. Оскільки всі команди Фактично виконаний CMD.EXE (Командна оболонка Windows NT), 16-розрядний Shell успадковує всі функції і Засоби всієї Windows NT оболонки.

RE: Мабуть, коли викликається command.com, це трохи складна таємниця;

Кілька місяців тому, в ході проекту, нам довелося з'ясувати, чому деякі програми, які ми хотіли запустити під CMD.EXE, насправді працювали під командою COMMAND.COM. «Програма», про яку йде мова, була дуже старим .BAT-файлом, який все ще працює щодня.

Ми виявили, що причина, по якій командний файл працює під командою COMMAND.COM, полягає в тому, що він запускається з файлу .PIF (також стародавнього). Оскільки спеціальні настройки конфігурації пам'яті, доступні тільки через PIF, стали недоречними, ми замінили його звичайним ярликом на робочому столі.

Оскільки вихідне повідомлення стосувалося наслідків використання суфікса .bat або .cmd. необов'язково команди всередині файлу.

Ще одна відмінність між .bat і .cmd полягає в тому, що якщо два файли існують з тим же ім'ям файлу і обома цими розширеннями, то:

введіть ім'я файлу або ім'я файлу .bat в командному рядку запустить файл .bat

щоб запустити файл .cmd, вам потрібно ввести ім'я файлу .cmd

Проте, в Windows 7 BAT-файли також мають таку різницю: якщо ви коли-небудь створювали файли TEST.BAT і TEST.CMD в тому ж каталозі, і ви запускали TEST в цьому каталозі, він запускав б BAT-файл .

все, що працюють в партії, повинні працювати в cmd; Cmd надає деякі розширення для управління середовищем. Крім того, cmd виконується в новому CMD-інтерпретатор і, отже, повинен бути швидше (не видно в коротких файлах) і більш стабільним, оскільки bat працює під емуліруемой 16-бітної середовищем з підтримкою NTVDM.

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

cmd і .bat відрізняється від того, що в змінної .cmd errorlevel воно може змінюватися в команді, на яку впливають командні розширення. TThats про це дійсно.

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

ви можете зіткнутися з цим, коли ви виконуєте файл сценарію, а потім редагуєте його, перш ніж він буде виконаний. Bat-файли будуть зіпсовані цим, але cmd-файли не будуть.

Схожі статті