Параметры пакетного файла. Программирование пакетных файлов

Лабораторная работа №2

Программирование командных файлов MS-DOS.

 

Введение: Любая современная операционная система (ОС) обладает набором встроенных команд, с помо­щью которых пользователь может общаться с машиной и выполнять действия в соответствии с определен­ным в системе языковыми правилам. Набор команд и степень их сложности зависят как от возможностей самой операционной системы (ОС), так и от вида интерфейса ЭВМ-пользователь. Операционная система MS_DOS достаточно проста и поэтому в ней содержится минимально необходимый набор команд. С помо­щью встроенных в MS_DOS команд можно, например, распечатать на экране монитора содержимое теку­щего каталога (команда dir), или вывести на экран содержимое тестового файла (команда type). Все команды DOS делятся на внутренние, встроенные в командный интерпретатор command.com, и внешние, располо­женные как правило, в каталоге DOS системного носителя. К внешним командам относятся, например, хо­рошо известные команды format, fdisk, sys, copy. Кроме этого, командный язык DOS позволяет пользова­телю создавать командные файлы, представляющие собой последовательность обычных команд и команд, предназначенных для программирования (for, if, goto, и т.д.)

Цель работы: ознакомление студентов с правилами составления командных файлов и приобретение необ­ходимых навыков системного программирования в процессе их создания.

Рекомендации по составлению отчета: отчет по лабораторной работе следует выполнять в редакторе Microsoft Word. Используйте в окне DOS функцию копирования результатов в буфер обмена c последующей вставкой содержимого буфера в файл отчета. Во время выполнения работы используйте русскоязычный help, расположенный в файле MSD62. Ниже приводится список внутренних, предназначенных для програм­мирования в командных файлах, команд DOS, взятый из файла MSD62, краткая аннотация к ним и примеры использования.

 

Описание внутренних команд DOS, предназначенных для программирования командных файлов:

Команда CALL

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

 

CALL [диск:][маршрут]имя_файла [параметры_ком_файла]

 

Например, чтобы запустить файл TEST.BAT из другого командного файла, включите в вызывающий файл команду CALL TEST.

Параметр [диск:][маршрут]имя_файла

задает расположение и имя вызываемого командного файла. Файл должен иметь расширение .BAT."Параметры_ком_файла" - это информация командной строки, необходимая для вызываемого команд­ного файла, включая параметры, имена файлов, подставляемые параметры с %1 по %9 и переменные опе­рационной среды.

Вы можете вызывать командный файл рекурсивно, однако при этом во избежание зацикливания тре­буется обеспечить команду выхода. Не используйте в команде CALL конвейеризацию (|) и символы пере­направления (<<, <, > и >>).

 

Команда CHOICE

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

 

CHOICE [/C[:]клавиши] [/N] [/S] [/T[:]c,nn] [текст]

 

Параметр "текст" задает текст, который вы хотите выводить перед подсказкой. Вопросительный знак необходим только в том случае, если вы включаете в текст перед подсказкой символ /. Если вы не задаете текст, CHOICE выводит на экран только подсказку.

Параметр /C[:]клавиши задает допустимые в подсказке клавиши. При выводе на экран клавиши будут разделяться запятыми, заключаться в квадратные скобки ([]) и сопровождаться вопросительным знаком. Если вы не указываете параметр /C, CHOICE использует по умолчанию YN. Двоеточие (:) не обязательно.

Параметр /N приводит к тому, что CHOICE не выводит подсказку. Однако текст перед подсказкой выво­дится. При задании /N указанные клавиши все равно будут доступны.

/S приводит к различимости в CHOICE регистра символов. Если параметр /S не задан, то для любых за­данных пользователем клавиш будет восприниматься как верхний, так и нижний регистр.

Если задан параметр /T[:]c,nn, то команда CHOICE перед использованием заданной клавиши по умол­чанию делает паузу в течении заданного числа секунд. В /T указываются следующие значения: c -опреде­ляет символ, который спустя nn секунд будет задаваться по умолчанию (этот символ должен быть в наборе символов, заданном в параметре /C); nn - задает продолжительность паузы в секундах (допустимые зна­чения лежат в диапазоне от 0 до 99 - если задается 0, то перед назначением по умолчанию будет пауза).

Первая назначенная вами клавиша возвращает значение 1, вторая - 2, третья - 3 и т.д. Если пользова­тель нажимает клавишу, отсутствующую в списке назначенных клавиш, то CHOICE дает предупреждающий звуковой сигнал (передает на консоль символ 07h).

Если CHOICE обнаруживает состояние ошибки, то возвращает значение 255. Если пользователь пе­редает CTRL+BREAK или CTRL+C, CHOICE возвращает значение, равное 0.

 

Например, если в командном файле вы указываете команду:

 

choice /c:ync

 

то пользователь видит следующее:

 

[Y,N,C]?

 

Если вы добавите:

 

choice /c:ync Yes, No, or Cancel

 

то пользователю выводится:

 

Yes, No, or Cancel [Y,N,C]?

 

Если вы зададите команду:

 

choice /c:ync /t:n,7

 

то пользователь видит на экране:

 

[Y,N,C]?

 

Если по истечении 7 секунд пользователь не нажмет клавишу, CHOICE выбирает N и возвращает зна­чение ERRORLEVEL 2. При нажатии соответствующей клавиши до истечения 7 секунд CHOICE возвра­щает значение, соответствующее выбору пользователя.

 

Команда ECHO

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

 

ECHO [ON¦OFF]

 

Чтобы использовать команду для вывода сообщения, запишите:

 

echo [сообщение]

 

Параметр ON¦OFF определяет, нужно ли включить или выключить эхоотображение. Чтобы вывести на экран текущую установку, задайте команду ECHO без параметра. "Сообщение" задает текст выводимого на экран сообщения.

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

 

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

При указании команды ECHO OFF в командной строке командная подсказка не выводится на экран. Чтобы вновь ее увидеть, наберите

 

ECHO ON.

 

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

Пробел между ними не указывается.

При использовании команды ECHO нельзя указывать символ конвейеризации (|) или перенаправления (< или >).

 

Команда FOR

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

В первом случае используется синтаксис:

 

FOR %%переменная IN (множество) DO команда [параметры]

 

а во втором случае:

 

FOR %переменная IN (множество) DO команда [параметры]

 

Параметр %%переменная или %переменная представляет подставляемую переменную. Команду FOR заменяет эту переменную текстом каждой строки в заданном множестве, пока команда после ключевого слова DO не обработает все файлы. "Множество" задает один или более файлов или текстовых строк, кото­рые вы хотите обработать с помощью заданной команды. Скобки обязательны. "Команда" задает ко­манду, выполняемую для каждого включенного в множество файла.

"Параметры" задают параметры данной команды (если она их использует). IN и DO - это не параметры, а обязательные ключевые слова команды FOR.

Чтобы избежать путаницы с параметрами командного файла %0 %9, для переменных следует использо­вать любые числа кроме 0 - 9. В простом командном файле вам хватит одного символа, например, %%F. Вложенность команд FOR на одной командной строке не допускается.

Параметр "множество" представляет одну или несколько групп файлов. В нем можно использовать тра­фаретные символы (* и ?). Допустимы следующие множества (*.doc), (*.doc *.dat *.rpt), (olg*.doc olgj*.rpt svt*.doc svt*.rpt), (ol??1991.* kr??1991.*).

При использовании команды FOR первое значение в множестве заменяет %%переменную (или %пере­менную), и MS-DOS выполняет для обработки этого значения заданную команду. Этот процесс продолжа­ется, пока MS-DOS не обработает все файлы (или группы файлов) в множестве.

Предположим, вы хотите использовать команду PRINT для распечатки содержимого всех файлов в те­кущем каталоге с расширением .DAT и .RPT. Для этого наберите команду:

 

for %f in (*.dat *.rpt) do print %f

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

 

for %f in (*.dat *.rpt) do type %f > prn:

 

Команда GOTO

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

 

GOTO метка

 

Параметр "метка" задает строку командного файла, на которую должна перейти MS-DOS. Метка не мо­жет включать в себя разделители (пробелы, точки с запятой или знаки равенства). GOTO использует пер­вые 8 символов каждой метки.

Метка, заданная вами в команде GOTO, должна совпадать с меткой в командном файле (перед такой меткой указывается двоеточие). Если командный файл не содержит заданной метки, то его обработка пре­кращается, а MS-DOS выводит на экран сообщение:

 

Label not found

(Метка не найдена)

 

GOTO часто используется с командой IF для выполнения перехода по условию. См. пример в описании команды IF.

 

Команда IF

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

 

IF [NOT] ERRORLEVEL число команда

 

IF [NOT] строка1==строка2 команда

 

IF [NOT] EXIST имя_файла команда

 

Параметр NOT определяет, что MS-DOS должна выполнять команду только в случае ложного значе­ния условия. "ERRORLEVEL число" определяет истинное условие только если предыдущая выполняе­мая COMMAND.COM программа возвращает код выхода, больший или равный заданному числу.

"Команда" задает команду, выполняемую MS-DOS при удовлетворении условия. "Строка1==строка2" определяет истинное условие только при совпадении указанных строк. Строки мо­гут быть лите-ральными или представлять собой переменные (например, %1). Кавычки для литеральных строк не требуются.

 

EXIST имя_файла задает истинное условие, если указанный файл существует.

Приведем пример:

if not errorlevel 1 goto A

...

:A

...

 

Здесь, если код выхода выполненной ранее программы отличен от 1, то выполняются операторы, сле­дующие за меткой A. В противном случае выполняется группа операторов за строкой if.

 

Команда PAUSE

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

 

Press any key to continue . . .

(Для продолжения нажмите любую клавишу)

 

Эта команда используется только в командных файлах и имеет синтаксис:

 

PAUSE

 

Если при выполнении командного файла вы нажмете клавиши CTRL+C, MS-DOS выведет на экран сообщение:

 

Terminate batch job (Y/N)?

(Прервать командный файл (Да/Нет)?)

 

При нажатии Y обработка командного файла завершается, и управление возвращается операционной системе. Таким образом, вы можете включить команду PAUSE перед той частью командного файла, кото­рую может потребоваться исключить из выполнения. Когда PAUSE приостановит обработку командного файла, вы можете для его завершения нажать CTRL+C.

 

Команда REM

Позволяет вам включать в командный файл или в файл CONFIG.SYS комментарии. Команду REM полезно использовать для временного запрещения команд. (В CONFIG.SYS вместо REM можно ис­пользовать точку с запятой.)

 

REM [строка]

 

Параметр "строка" задает любую строку символов (в комментарии командного файла нельзя указы­вать символы <, > и |).

Команда REM не выводит на экран сообщений (см. описание команды ECHO). Чтобы вывести ком­ментарии на экран, включите в CONFIG.SYS или командный файл команду ECHO ON.

 

Команда SHIFT

Изменяет позицию параметров в командном файле.

 

SHIFT

Команда SHIFT изменяет значения замещаемых параметров с %0 по %9, копируя каждый параметр в предыдущий, то есть значение %1 копируется в %0, %2 - в %1 и т.д. Это полезно для написания команд­ного файла, выполняющего с любым числом параметров одну и ту же операцию. С помощью SHIFT вы можете также построить командный файл, воспринимающий более 10 параметров: те параметры, которые задаются после десятого (%9), будут сдвигаться по одному в %9.

Команда, обратная SHIFT (обратный сдвиг), отсутствует. После выполнения SHIFT вы не сможете восстановить первый параметр (%0), который был перед сдвигом.

Приведем в качестве примера командный файл DIRCOP.BAT, который копирует список файлов в за­данный каталог. В качестве параметра задаются имя каталога и любое число файлов.

 

@echo off

set ddir=%1

:getname

shift

if "%1"=="" goto end

copy %1 %ddir%

goto getname

:end

set ddir=

 

 

Параметры пакетного файла. Программирование пакетных файлов

Как и во всяком языке программирования, командный интерпретатор содержит переменные (параметры), которым могут быть назначены конкретные значения во время выполнения пакетного файла (программы). Переменные могут обозначаться любым набором символов, который не должен начинаться с цифры или служебного символа и не должен содержать пробелы. Например, набор символов temp или темр8 является допустимым для обозначения переменной, а 6temp или temp 8 – недопустимым набором. Переменные ко­мандного интерпретатора обычно называют именованными параметрами. Присвоить значение именован­ным параметрам можно с помощью команды set. Например,

set temp = c:\windows\temp

Прим: команда set без параметров выводит на экран список всех переменных, назначенных на данный момент операционной системой и пакетными файлами с указанием их значений.

Прочитать же содержимое такой переменной можно, например, командой echo. Но при этом название переменной необходимо заключить в знаки %. Например,

echo %temp%

Кроме именованных параметров командный интерпретатор содержит и так называемые позиционные параметры (переменные), которые используются пакетными файлами для ввода собственных параметров (то, что указывается вслед за названием файла). В командной строке имя файла и параметры разделяются один от другого пробелами. Внутри пакетного файла позиционным параметрам соответствуют переменные, обозначаемые символами от %0 до %9, то есть всего таких переменных ровно десять. При этом переменная %0 принимает значение равное названию самого файла. Поэтому фактически первому позиционному пара­метру будет соответствовать переменная %1, второму -%2 и т.д. до %9.

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

echo off echo Название файла %0 echo Первый позиционный параметр %1 echo Второй позиционный параметр %2 echo Третий позиционный параметр %3

 

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

Start.bat p1 p2 p3

После выполнения файла мы увидим значения всех позиционных параметров.