Командные файлы DOS.Примеры

Общие сведения Командные (пакетные) файлы — это обычные текстовые файлы, содержащие команды ОС. В MS DOS командные файлы имеют расширение bat (batch — пачка). Такие файлы относятся к исполняемым файлам ОС. Это значит, что для запуска bat-файла нужно набрать в командной строке его имя и нажать Enter. После имени bat-файла могут идти несколько параметров (разделённых пробелами), необходимых ему для работы. Обычно в виде bat-файла оформляется последовательность наиболее часто используемых команд DOS, либо программа на языке ОС, облегчающая выполнение задач пользователя. Обработка команд bat-файла осуществляется в режиме интерпретатора, построчно. В одной строке bat-файла записывается одна команда (оператор). Для досрочной остановки bat-файла можно нажать комбинацию клавиш CTRL+C или CTRL+BREAK. Для создания командных файлов подходят те же средства, что и для создания обычных текстовых файлов. Например, команды copy con в MS DOS, а также команда Edit (F4 или Shift+F4) в программе Far.

КомментарииКомментарии в bat-файле начинаются со слова rem (remark — замечание, заметка). Всё, что записывается справа от этого слова (через пробел), игнорируется командным процессором. Таким образом, можно не только вставлять в код текстовые пометки, но и временно исключать из текста программы часть кода (это может быть полезно при отладке программы).

Например: rem Это комментарий

ПаузаКоманда паузы используется для временной приостановки работы bat-файла. Она может пригодиться, когда нужно дать возможность пользователю прочесть сообщение программы и пр. Команда вызывается в отдельной строке и выглядит следующим образом: pause После чтения этой команды выполнение bat-файла приостанавливается и ожидается нажатие на любую алфавитно-цифровую клавишу. Затем выполнение программы продолжается.

Вывод сообщений из bat-файла Для вывода сообщений из bat-файла служит команда ECHO, которая имеет следующий формат: echo [on | off | <строка>] Ключ ON позволяет дублировать команды (строки) bat-файла на экране при его выполнении. То есть перед выполнением очередной команды сама команда записывается на экране, а затем идёт результат её выполнения. Этот режим установлен по умолчанию и удобен при отладке программы. Ключ OFF позволяет отключить такое дублирование. Он удобен при работе с готовой программой. Вызов команды echo без параметров позволяет узнать её текущее состояние (ON / OFF). В готовую отлаженную программу первой строкой обычно вставляют команду echo off. Чтобы сама эта команда не выводилась на экран, её предваряют (без пробелов) символом @: @echo off Символ @ делает то же самое, что и echo off, но только для той команды, перед которой записан непосредственно. После команды echo можно записывать произвольную текстовую строку, в результате чего эта строка будет выведена на экран. Если вызвать команду в виде echo. (то есть echo с точкой), то будет выведена пустая строка. Заметим, что при работе с командами bat-файлов можно пользоваться символами перенаправления. Так что команда echo Привет! > abc.txt создаст текстовый файл abc.txt и выведет в него строчку «Привет!».

Замещаемые параметры Замещаемые параметры — это механизм, позволяющий создавать более гибкие и мощные программы. Он является аналогом механизма параметров для процедур в языке программирования Паскаль. Фактически, используя ниже слово «параметр» мы будем иметь в виду параметр командной строки.

При работе с замещаемыми параметрами следует обратить внимание на два момента: (1) как обращаться к параметрам внутри bat-файла и (2) как правильно вызвать готовый bat- файл. Рассмотрим пример: нужно написать bat-файл, создающий каталог ABC1. a.bat

Md ABc

Вызвать этот файл можно, написав в командной строке имя файла (a) и нажав Enter. В результате в текущем каталоге будет создан каталог ABC. Но что если требуется создавать всякий раз разные каталоги? В этом случае надо имя каталога указать параметром bat-файла, и обращаться к этому параметру при вызове bat-файла. Вот как это будет выглядеть: a1.bat

md %1

Здесь %1, во-первых, — признак того, что у нашего bat-файла имеется один параметр командной строки (один, так как %2 и больше в этом файле отсутствуют). Во-вторых, %1 — это само значение параметра. Вызывать этот файл можно так: >a1 ABC или >a1 cba В первом случае будет создан каталог ABC, а во втором — каталог CBA. Таким образом, то, что мы задаём первым параметром командной строки, подставляется при вызове bat-файла вместо %1; то, что задаётся вторым параметром — вместо %2 и так далее. Всего может быть девять параметров внутри файла (%1–%9) и произвольное количество параметров командной строки (если их более 9, то для обработки используется команда Shift). Параметр %0 задаёт имя самого bat-файла. Пример: params.bat

@echo %0 %1 %2

Вызов файла: >params x y z Результат: params.bat x y Как видно, третий параметр (z) в bat-файле не обрабатывается, поэтому при выводе он проигнорирован. Пример: написать bat-файл, который перемещает файлы (по маске) из одного каталога в другой. Адрес и маску файлов задать первым параметром, а каталог-приёмник — вторым. move.bat

copy %1 %2 del %1

При вызове, например,

move txt\a*.* temp происходит подстановка: txt\a*.* → %1, temp → %2, так что фактически выполняются команды: copy txt\a*.* temp del txt\a*.*

Переходы (goto) Безусловные переходы внутри bat-файлов реализуются командой GOTO. Её синтаксис: goto <метка> Здесь <метка> — это строка символов. В соответствующем месте bat-файла строка перехода должна быть помечена: :<метка> Пример использования этой команды рассмотрим при изучении условных переходов.

Ветвление (IF) Команда ветвления IF позволяет выполнить другую команду, если истинно некоторое логическое условие. Она может использоваться в следующих основных конструкциях.

Сравнение строк Для сравнения двух текстовых строк используется следующая конструкция: IF [NOT] <строка1> == <строка2> <команда> Если первая строка равна второй, то выполняется команда. При указании NOT команда выполняется в том случае, если строки не равны. Команда IF в такой форме удобна для проверки параметров командной строки. Рассмотрим пример пакетного файла, который запускает программу Chess, если первый параметр командной строки равен «C» и запускает Turbo Pascal, если этот параметр равен «P». Если параметры командной строки отсутствуют, то выдаётся сообщение о правильном формате запуска bat-файла. runit.bat (найдите и исправьте ошибку в этом файле!)

if ”%1” == ”C” chess

if {%1} == {P} turbo

if #%1# == ## echo format: runit C|P

Вызвать этот файл можно, например, так (регистр символов у параметров важен!): >runit C

Условные переходы Для организации условных переходов внутри bat-файла команда IF используется совместно с GOTO. Это бывает необходимо, когда в команде IF должны быть выполнены несколько других команд, а не одна, как в предыдущем примере. Напишем bat-файл, который запускает шахматы, если указан параметр командной строки «C» и запускает шашки, если параметр не указан.

run1.bat

if ”%1” == ”C” goto chess

if #%1# == ## goto end

cd \games\checkers

checkers.exe

goto end

:chess

cls

\games\chess\chess.exe

:end

Проверка существования файла на диске Чтобы проверить существует ли какой-либо файл на диске нужно обратиться к команде IF в следующем формате: IF [NOT] EXIST <адрес> <команда> Здесь <адрес> — это адрес файла на диске, а <команда> — это та команда, которая выполняется, если файл существует (или не существует: при указании NOT).

Запуск одного bat-файла из другого Для вызова одного bat-файла из другого можно поступить двумя различными способами.  указать адрес вызываемого файла  воспользоваться командой вызова: CALL <адрес файла> В первом случае вызываемый файл запустится, но после его выполнения управление в вызывающий файл не вернётся: работа будет завершена. Во втором случае после выполнения вызываемого файла управление будет возвращено в вызывающий, который продолжит своё выполнение со строки, следующей за CALL. В качестве примера разберите работу следующих файлов: typeme.bat

echo.

echo This is TypeMe.bat!!

echo.

test.bat:

copy *.txt a:

typeme

del *.txt

testcall.bat:

copy *.txt a:

call typeme

del *.txt В файле test.bat последняя стока выполнена не будет.

Циклическая подстановка Циклическая подстановка — это аналог цикла в языках программирования высокого уровня. Её применяют в тех случаях, когда требуется выполнить однотипные действия сразу над несколькими объектами. Формат команды: FOR %%<переменная> IN <множество> DO <команда> <Множество> — это последовательность строк (в том числе и масок файлов), разделённых пробелами или запятыми и заключённых в круглые скобки. Примеры множеств: (*.txt) (*.doc a*.*) (A,B,C,D,E) Некоторые ранее рассмотренные команды фактически имеют циклическую природу. Такие команды можно реализовать и с помощью циклической подстановки (хотя это достаточно бессмысленно). Например, команду copy a*.* xyz можно было бы записать так: for %%n in (a*.*) do copy %%n xyz Эти команды эквивалентны; разберитесь, как работает вторая. Рассмотрим ещё несколько примеров. Удалить из текущего каталога все doc- и txt-файлы одной командой: for %%x in (*.doc, *.txt) do del %%x Скопировать имена всех bat-файлов, которые начинаются на «a», «b» и «c», в один файл abc.txt: for %%k in (a*.bat b*.bat c*.bat) do echo %%k >> abc.txt Заметим, что следующие варианты желаемого результата не дадут: for %%k in (a b c) do echo %%k*.* >> abc.txt for %%k in (a b c) do copy %%k*.bat abc.txt

Наши рекомендации