Программирование командных BAT-файлов, обработка аргументов, метки,
Операторы перехода и ветвления, организация циклов
Цель: з акрепить навыки работы с командной строкой; изучить структуру командного файла, команды, используемые в командных файлах; получить практический навык создания командных файлов.
Теоретические сведения
- Пакетные командные файлы (ПКФ) в системе MS-DOS
Пакетные командные файлы используются в операционных системах (ОС) для того, чтобы иметь возможность задавать последовательность команд ОС, управлять запуском задач, создавать разные варианты рабочей среды.
ПКФ в системе MS-DOS являются текстовыми файлами в коде ASCII, которые содержат последовательности команд ОС. Они должны иметь расширение.ВАТ и иметь имя не более восьми символов. При этом, в текущем каталоге не должно быть одноименных файлов с расширением.СОМ или.ЕХЕ.
В ОС MS-DOS специально для ПКФ предусмотрено восемь команд и специальный символ @ (Табл.1).
Данные команды являются внутренними командами ОС, размещаются в командном процессоре и доступны из любого каталога.
Таблица 1
Команда | Назначение |
@ | Не выводит на экран дисплея строку которая следует за ним. |
CALL | Осуществляет выполнение одного пакета команд внутри другого пакета. |
CLS | Очистка экрана. |
ECHO OFF | Запрещает вывод на экран командных строк. |
ECHO ON | Разрешает вывод на экран командных строк. |
ECHO <текст> | Вывод на экран текстовой информации (при действии команды ECHO OFF). |
FOR | Задание цикла. |
GOTO<метка> | Передача управления на указанную метку. |
IF | Условное выполнение команды. |
PAUSE | Прерывает выполнение программы. |
REM | Выводит текст на экран дисплея. |
SHIFT | Сдвиг влево параметров команды. |
Для запуска ПКФ вводится его имя без расширения. В случае, если ПКФ находится не в текущем каталоге, путь доступа к ПКФ должен быть определен командой РАТН. Если в какой-либо команде пакета была допущена ошибка, то выполнение пакета прекращается и на экран выводится сообщение об ошибке.
Можно прервать выполнение пакета нажатием Ctrl-C. В этом случае выводится сообщение:
Terminate batch job (Y/N)?
(Завершить работу командного файла (Да/Нет)?
ПКФ можно сформировать с помощью любого текстового редактора или других программ позволяющих создавать файлы в коде ASCII.
- Действие команд в командных файлах
Рассмотрим более подробно некоторые команды в ПКФ.
- ECHO ON/OFF
ECHO <текст сообщения> - вкл/выкл режима вывода команды перед её выполнением.
@ – если этот символ поставлен в начало строки, то следующая за ним команда не выводится при включенном режиме вывода команды перед её выполнением (т.е. если ECHO ON).
- GOTO
После имени этой команды сообщается метка командной строки, в которую производится переход. Если перед строкой указано двоеточие, то это означает, что за ним следует метка, а не команда. Между двоеточием и именем пробел не ставится, между именем и командой GOTO оставляют пробел. Длина метки ограничивается 8 символами.
Например,
GOTO EXIT оператор безусловного
……………. перехода по метке
:EXIT
· CHOICE
CHOICE [/С:список символов][/Т:символ,число секунд] сообщение
/С:список символов – указывает допустимые символы, которые может ввести пользователь в ответ на сообщение. Если данный параметр не указан, допустимые символы – Y и N.
/Т:символ,число секунд – если этот параметр указан, то в случае, когда пользователь по истечении заданного времени не нажал ни на одну клавишу, принимается ответ символ.
Например: CHOICE /C:YN “Запустить программу ALFA? ”– при ответе N значение переменной ERRORLEVEL устанавливается равным 2, а при ответе Y – равным 1.
- IF
IF <условие> <действие> – оператор условия.
Например: IF ERRORLEVEL 1 GOTO EXIT.
Переменная <условие> может иметь один из четырех форматов:
1. <набор_символов_1>==<набор_символов_2>.
Условие выполняется, если <набор_символов_1> и <набор_символов_2> являются идентичными после замещения параметров.
2. ERRORLEVEL <номер>.
Условие выполняется, если для последней команды, которую выполнила ОС код завершения равен или больше значения <номер>.
3. EXIST <имя_файла>.
Условие выполняется, если существует файл с указанным именем.
4. NOT <условие>.
Условие выполняется, если не выполняется заданное условие.
- COMMA
COMMAND /Y /C имя_командного_файла [параметры] – выполнение командного файла в пошаговом режиме. Текст каждой команды будет выводиться перед выполнением на экран. Для выполнения команды надо нажать клавишу Y или Enter.
- PAUSE
Выводит на экран сообщение: Strike a key when ready.... Если нужно вывести текст на русском языке, то перед командой PAUSE можно ввести ECHO с текстом "Нажмите любую клавишу".
И после нажатия клавиши дальше выполняется командный файл. В период паузы возможен выход из выполнения командного файла путём нажатия сочетания клавиш Ctrl+C или Ctrl+Break.
- SHIFT
Формат команды прост: SHIFT. В ПКФ можно использовать до десятка параметров, с помощью данной команды это количество можно увеличить. Команда SHIFT присваивает новые значения параметрам %0 - %9. При этом параметру %0 присваивается старое значение %1,%1 - старое значение %2 и т.д. %9 присваивается значение, следующее за старым значением %9 в командной строке.
- FOR
FOR %%N IN(группа) DO команда %%N,
где N - однобуквенная переменная, последовательно принимающая значения, входящие в параметр (группа);
(группа) - имя файла или имена файлов, вместе с именем файла могут указываться дисковод и возможный путь доступа; команда - команда ОС MS-DOS.
- CALL
CALL [<дисковод:>][<путь_доступа>]<командный_файл> <параметры>,
где <дисковод:> - дисковод диск которого содержит командный файл;
<путь_доступа> - путь доступа к данному ПКФ;
<командный файл> - имя ПКФ без расширения.
Задание на лабораторную работу
В соответствии с номером по списку в журнале разработать пакетный bat-файл (см. таблицу2). В пакетных файлах предусмотреть сообщение имени, назначения, применения и автора пакетного файла (при пустой командной строке и по ключу /?), контроль верности командной строки, наличие требуемых файлов и сохранность имени пакетного файла. Текущий каталог не изменять, если это специально не оговорено. Там, где необходимо, имена файлов указывать с полным путем и диском. С клавиатуры при работе пакетного файла вводить только числа, строковые данные выбирать либо из меню, либо передавать в командной строке.
Таблица 2
№ | Задание |
Разработать пакетный файл для обновления архива. Выбор архиватора осуществляется из меню. Имя архива передается в командной строке. | |
Разработать пакетный файл для очистки подкаталога с подтверждением. | |
Разработать пакетный файл для проверки дисков (каталогов) на вирусы. Диск выбирается из меню. Имя антивирусной программы - в командной строке (drwebw.exe). | |
Разработать пакетный файл для выбора из меню на запуск одного из нескольких редакторов (notepad, ncedit и др.) для редактирования требуемого файла. Имя файла передается в командной строке. | |
Разработать пакетный файл для архивации файлов в каталогах и подкаталогах (по отдельности в каждом каталоге) и удаления архивных файлов. Имена каталога и архиватора - в командной строке. | |
Разработать пакетный файл для построения системы студенческих каталогов с запросом на создание каталогов требуемых курсов, групп и запросом максимального числа пользователей в группе. Номера курсов и шифры групп - в командной строке. | |
Разработать пакетный файл для перехода студента в личный каталог. Группа выбирается из меню, курс передается в командной строке | |
Разработать пакетный файл для установки даты и времени (параметры – в командной строке) | |
Разработать пакетный файл для очистки студенческих каталогов: удаления файлов *.BAK, *.TMP и др. Номера очищаемых курсов передаются в командной строке. | |
Разработать пакетный файл для вывода (на экран, файл, принтер) списка файлов из каталогов студентов. Шифр группы - из командной строки, направление вывода - из меню. | |
Разработать пакетный файл для перехода в каталог студента, если он существует и его архивирования | |
Разработать пакетный файл для вывода текстового файла на экран по страницам. Имя файла передается в командной строке. | |
Разработать пакетный файл для перезаписи файлов документов (*.doc, *.txt) из одного каталога в другой с обновлением | |
Разработать пакетный файл для копирования всех файлов документов (*.doc, *.txt) из всех студенческих подкаталогов в директорию «Мои документы» | |
Разработать пакетный файл для проверки наличия файлов документов (*.doc, *.txt) в данном подкаталоге (имя – в параметрах). В случае положительного ответа – вывести их список | |
Разработать пакетный файл для резервного копирования файлов с определенными расширениями из разных каталогов с возможностью создания резервного каталога, если его нет в системе | |
Разработать пакетный файл для поиска во временном каталоге системы файла, имя которого передается параметром, если файл найден, то выдать на экран его отличия от файла с таким же именем из текущего каталога; Если файлы текстовые, то выводятся различающиеся строки из этих файлов. Если файлы двоичные (или указан ключ двоичного сравнения) выводятся различающиеся байты. | |
Разработать пакетный файл принимающий параметр с указанием имени файла, содержащего список фамилий студентов. Пользователь должен с клавиатуры вносить новые значения. Наименование файла соответствует названию группы студентов. Если такой файл существует, то выполняется его пополнение. Файл сохраняется в отсортированном в порядке возрастания виде. | |
Разработать пакетный файл, копирующий в указанную папку указанные файлы, у которых не установлен атрибут «Архивный» и устанавливающий им атрибут «Архивный». | |
Разработать пакетный файл, который из файлов заданных параметрами командного файла создает файл с заданным именем, в который поместить сначала содержимое файлов, в имени которых есть строка «fil», затем содержимое всех остальных файлов. | |
Разработать пакетный файл, который выводит на экран, и сохранить в указанном файле полные названия папок (с путем) в названии которых встречается слово Debug. | |
Разработать пакетный файл, который считает размер файлов заданного типа, хранящихся на диске в папках с заданным именем. | |
Разработать пакетный файл, принимающий параметры с указанием фамилии студента, которого необходимо исключить из списка группы и наименования файла, содержащего этот список, а также выполняющий это действие. | |
Разработать пакетный файл, принимающий параметры с указанием двух фамилий студентов, одну из которых следует заменить второй, и наименования файла, содержащего список, а также выполняющий это действие. | |
Разработать пакетный файл, который для поддерева папок, начиная с указанной папки переименовывает подпапки с указанным именем, если они существуют, добавив к их имени расширение bak. |
Контрольные вопросы:
- Что такое командный файл?
- Какой файл является командным интерпретатором?
- Каково назначение файла AUTOEXEC.BAT?
- Что такое ESC-последовательность?
- Для чего предусмотрена возможность создания в MS-DOS пакетных файлов?
- Какие команды операционной системы могут использоваться в ПКФ?
- Как запускаются ПКФ?
- Что произойдет при выполнении ПКФ если в командах командного файла допущена ошибка?
- Каким образом можно прервать выполнение пакета?
- Какими средствами можно создать текст ПКФ?
- Каким образом организуется ветвление в ПКФ?
- Сколько параметров можно использовать при вызове ПКФ?
- Как действует команда CALL?
- Каково назначение символа @?