|
|
Пример 2. Опишем прием, который часто используется для организации ветвления по коду, введенному пользователем с терминала (настройка на пользователя). Будем предполагать наличие специальной программы (назовем ее ASK-CODE), которая выполняет следующие операции:
— выдает на экран текст сообщения,
— принимает введенное пользователем с клавиатуры число,
— вырабатывает код завершения, совпадающий с этим числом. Фрагмент командного файла, использующего программу
ASK-CODE, может иметь следующий вид:
ASK-CODE "Ваш код?" if errorlevel б goto USER5 if errorlevel 4 goto USER4
if errorlevel 1 goto USER1 cd work
goto end :USER5 cd user5
goto end :USER4 cd user4
goto end :USER1 cd user1
tend
В данном примере группа команд IF ERRORLEVEL ... осуществляет анализ кода завершения, выработанного программой ASK-CODE (равного, напомним, числу, введенному пользователем с терминала в ответ на вопрос "Ваш код?"). В зависимости от значения происходит переход на одну из меток USER5, USER4, ... USER1, где затем происходит настройка операционной среды на конкретного пользователя. Если введенный пользователем код превышает 5, то переход все равно происходит на метку USER5; если же код равен 0, происходит переход на следующую команду под указанной группой операторов (cd work). Таким образом, осуществляется ветвление внутри командного файла.
Пример 3. Иногда в начале работы пользователю необходимо узнать, не оставил ли ему кто-либо из коллег какое-нибудь сообщение. Допустим, имеется договоренность, что такие сообщения заносятся в файл MAIL.(N) в каталоге USER<N>, где <N> — код пользователя-адресата. Тогда проверка наличия сообщения и его печать для пользователя с кодом 1 может осуществляться командой вида:
if exist MAIL.1 type MAIL.1
Такая команда может стоять внутри участка командного файла, рассмотренного выше, после строки cd user1. Аналогичные команды могут находиться в других участках этого командного файла после меток USER5, USER4 ... __
Пример 4. Допустим, в общедоступном каталоге имеется программа NOTES.EXE, реализующая работу с картотекой/записной книжкой. Такую программу пользователь должен запускать с разными параметрами — именами картотек, которые находятся в разных каталогах;
— картотека TELEF в каталоге TEL,
— картотека PAPERS в каталоге PAPERS,
— картотека PERSON в каталоге ADMIN.
При обычном способе запуска пользователю пришлось бы набирать каждый раз по две команды с. длинными именами, например:
cd el
notes telef
Можно создать в общедоступном каталоге командный файл, который позволит осуществлять необходимые вызовы с использованием простых однобуквенных мнемонических имен. Такой командный файл с именем N.BAT может иметь вид (выделение меток большими буквами здесь сделано лишь для наглядности):
echo off
if %1. = = . goto exit
if % 1 ===== t goto TEL
if %1 == p goto PAP
if %1 == s goto PERS
goto exit
:TEL
cd el
notes telef
goto exit
:PAP
cd papers
notes papers
goto exit
:PERS
cd admin
notes person
:exit
Обращение к указанному файлу при вызове разных картотек должно иметь вид:
n t или n р или n s
При этом буквы t, p, s должны быть малыми, поскольку именно в таком виде они заданы в условиях операторов IF.
Отсутствие букв t, p или s при вызове этого файла приведет к переходу на метку exit.
Команда FOR. Обеспечивает циклическое выполнение команд ДОС При этом можно задать формальный параметр и список фактический параметров (обычно — имен файлов), которые последовательно подставляются вместо формального параметра в текст исполняемой команды.
Пример 5. Пусть имеется необходимость систематически копировать файлы PROG.PAS, PRQG.OBJ и PROG.EXE из рабочего каталога на виртуальный диск D:. С этой целью можно в соответствующем командном файле дать команду:
for %%А in (PAS OBJ EXE) do copy PROG.%%A d;
Здесь формальный параметр %%А последовательно сопоставляется со списком фактических параметров в круглых скобках и используется в команде COPY, которая в данном случае сработает 3 раза подряд.
Подставив в качестве второго аргумента команды COPY вместо имени D: еще один формальный параметр %, можно будет менять назначение копирования, задавая его с терминала.
Брябрин В.М. |