Рекурсивные (вложенные) вызовы командных файлов
Командные файлы с параметрами При вызове командного файла можно в командной строке задавать последовательность аргументов, отделенных друг от друга пробелами, которые будут замещать формальные параметры при интерпретации строк bat-файла. Допускается использовать до 10 формальных параметров с именами %0, %1, …, %9. Действует принцип позиционного соответствия параметров и аргументов, т.е. вместо %0 подставляется имя самого командного файла, вместо %1 подставляется первый аргумент и т.д. Пример: Пусть имеется командный файл pf.bat, содержащий строки: @ECHO OFF Запустить его на выполнение можно, набрав команду pf.bat f1.txt f2.txt. Результатом работы станет вывод на экран содержимого файла f1.txt, а затем, после нажатия клавиши – файла f2.txt. Для обработки неизвестного заранее количества параметров можно использовать команду shift – сдвиг списка формальных параметров относительно списка аргументов. Если после операции сдвига выполнять возврат (GOTO) к обработке параметра, то количество аргументов – фактических параметров – может ограничиваться только длиной командной строки. Тогда первому формальному параметру будет поочередно соответствовать 1-й, 2-й, 3-й и т.д. фактический параметр. Такой «цикл» должен завершиться, когда закончатся фактические параметры (т.е. очередной параметр окажется пустым). Пример: Если в конце списка аргументов написать символ Y, а первой строкой «цикла» сделать IF %1==Y GOTO m, то произойдет переход на метку m, когда закончится список фактических параметров. Параметры можно передавать через глобальные переменные, которые устанавливаются командой set, а затем используются в командном файле. Имя глобальной переменной с двух сторон заключается в %.
Пример: Для добавления маршрута поиска к имевшимся ранее в командный файл можно включить строку @SET PATH=%PATH%;H:\PAS. Рекурсивные (вложенные) вызовы командных файлов В общем случае (в первых версиях по 3.2 включительно) в MS-DOS не были предусмотрены вложенные вызовы командных файлов с возвратом. Однако они возможны, если применить особый способ – обращение к командному процессору command.com с указанием в качестве аргумента имени вызываемого командного файла. Пример: Пусть имеется два командных файла – «вызывающий» x.bat и «вызываемый» y.bat. Оформление вызова y.bat из x.bat и возврат обратно осуществляется по следующей схеме:
В MS-DOS начиная с версии 3.3 появилась команда call, предоставляющая возможность вызывать один командный файл из другого с последующим возвратом, например: call y.bat. 2.1.2 Задание для выполнения лаб. работы №3 1. Создать командный файл tf1.bat, который может иметь любое (неизвестное заранее) количество входных параметров, представляющих собой имена файлов. Он должен работать следующим образом: § На экран выводится последовательно содержание нескольких текстовых файлов, имена которых указывались в командной строке. § Текст каждого файла выводится на экран после нажатия клавиши, на чистом экране, сверху выдается заголовок, содержащий имя отображаемого файла. § Если искомый файл не существует, выводится соответствующее сообщение (на русском языке) с указанием имени файла. § По окончании работы выдается сообщение вида «Файлов больше нет. Работа окончена». § При запуске программы без параметров выводится сообщение об их отсутствии (отличное от того случая, когда они закончились). 2. ¨ Создать файл cf1.bat, который может иметь любое количество входных параметров, представляющих собой имена файлов. При запуске его без параметров должна выводиться подсказка – формат команды. Работа файла cf1.bat заключается в следующем:
§ Для каждого из заданных файлов выполняется проверка на его существование в текущем каталоге, и результат ее выводится на экран. § Действия выполняются до тех пор, пока не будут проверены все файлы, перечисленные в командной строке. § В процессе работы должны быть созданы два файла: list_ex.txt и list_n.txt – в первый заносятся имена существующих файлов, во второй – несуществующих. § По окончании работы оба новых файла выводятся на экран, сопровожденные заголовками. ¨ Запустить файл cf1.bat для проверки с разным количеством параметров. ¨ *Сделать в файле cf1.bat необходимые изменения, чтобы можно было в качестве первого параметра указывать путь к каталогу, в котором будет выполняться поиск перечисленных файлов. 3. ¨ Создать командный файл cf2.bat, параметром которого является имя файла. Работа cf2.bat состоит в проверке наличия указанного файла в текущем каталоге. Далее выполняется разветвление: § Если файла нет, вызвать mf.bat, в котором создается пустой файл с указанным именем (имя передавать как параметр) и затем выводится на экран содержимое каталога. § Если файл есть, рекурсивно вызвать cf2.bat, который будет распечатывать этот файл на экране, сопровождая заголовком «Печатается файл такой-то» (с указанием его имени). ¨ При запуске каждого командного файла выводить сообщение, какой именно файл работает. При рекурсивном вызове cf2.bat сначала должно появиться сообщение вида «файл cf2.bat запущен повторно», по окончании его работы – «повторный вызов завершен». После возврата в исходный файл вместо стандартного сообщения команды PAUSE сделать свое, например «Работа окончена». 2.1.3 Контрольные вопросы 1. Сколько может быть формальных параметров у командного файла? Фактических? Совпадает это количество или нет и почему? 2. Как можно выполнить рекурсивный вызов командного файла? 3. Для чего нужна команда SHIFT? 4. Какие команды и почему используются только в командных файлах, но никогда не применяются при вводе команды в командной строке?
Воспользуйтесь поиском по сайту: ©2015 - 2024 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...
|