Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лабораторная работа N1(Операционные системы).doc
Скачиваний:
2
Добавлен:
10.11.2019
Размер:
434.18 Кб
Скачать

14

Лабораторная работа №1 Теоретическая часть

Цель работы: Изучение языка пакетных командных файлов (Batch Script).

  1. Основные конструкции языка

    1. Передача управления указанному командному файлу. После окончания выполнения вызываемого файла управление будет возвращено на строку, следующую за командой call.

Формат вызова:

CALL <имя файла> <список параметров>

Возврат из вызываемого файла:

EXIT <код завершения>

Пример использования:

CALL backup.bat C:\MyDocuments\*.* C:\Backups\MyDocuments.rar

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

После окончания выполнения функции управление будет возвращено на строку, следующую за командой вызова функции.

Внутри функции доступ к переданным в неё параметрам осуществляется через переменные %1 - %9.

Результат выполнения функции передается в переменную %ERRORLEVEL%.

Формат вызова:

CALL :<имя функции> <список параметров>

Возврат из функции:

EXIT /B <возвращаемое значение>

Пример использования:

REM Устанавливаем значения операндов

SET OP1 = 2

SET OP2 = 3

SET OP3 = 5

REM Вызываем функцию с именем SUM с параметрами OP1, OP2 и OP3

CALL :SUM %OP1% %OP2% %OP3%

REM Выводим на экран результат работы функции

ECHO RESULT = %ERRORLEVEL%

PAUSE

EXIT

REM Заголовок функции SUM

:SUM

REM Выводим на экран значения переданных в функцию параметров

ECHO OPERANDS: %1 %2 %3

REM Суммируем параметры и помещаем результат в переменную RESULT

SET /A RESULT = %1 + %2 + %3

REM Выходим из функции с результатом, хранящимся в переменой RESULT

EXIT /B %RESULT%

    1. Очистка экрана

Формат вызова:

CLS

    1. Управление режимом отображения команд при их исполнении

Формат вызова:

ECHO ON – включение отображения команды перед её вызовом

ECHO OFF – выключение

@<команда> – выключение режима только для указанной команды

Пример использования:

@CALL :SUM

@ECHO OFF

    1. Вывод строки текста

Формат вызова:

ECHO <строка> | %<имя переменной>%

Пример использования:

ECHO Hello, %USERNAME%

Данная команда выведет на экран строку Hello, и имя текущего пользователя системы

    1. Оператор цикла

Осуществляет многократный вызов команды (или блока команд).

Обратите внимание, что внутри цикла имя переменной должно предваряться символами %%, в то время как в остальных конструкциях языка имя переменной должно обрамляться символами % с двух сторон.

Формат вызова для перебора всех элементов файловой системы, соответствующих указанному шаблону:

FOR [ /D | /R [<путь>] ] %%<имя переменной> IN (<шаблон имени файла>) DO <команда или блок>

/D – перебор имен каталогов вместо имен файлов

/R – перебор всех файлов (или каталогов, если в качестве шаблона указан символ . ) начиная с каталога по указанному пути (или, если путь не указан, начиная с текущего каталога) и во всех его подкаталогах

Пример использования:

FOR %%FILE IN (*.doc) DO @ECHO %%FILE

Выведет на экран перечень всех файлов с расширением .DOC

Формат вызова для перебора значений с начального по конечное, с указанным шагом:

FOR /L %%<имя переменной> IN (начало,шаг,конец) DO <команда или блок>

Пример использования:

FOR /L %%I IN (1,2,10) DO @ECHO %%I

Выведет на экран числа 1,3,5,7,9

Формат вызова для обработки содержимого всех файлов в <наборе>, либо значения, содержащегося в <строке>, либо набора строк, возвращаемого после выполнения <команды>.

Обработка осуществляется в соответствии с правилами, определяемыми ключевыми словами, разделенными пробелами, в строке <ключи>.

FOR /F ["ключи"] %переменная IN (набор-файлов) DO команда [параметры]

FOR /F ["ключи"] %переменная IN ("строка") DO команда [параметры]

FOR /F ["ключи"] %переменная IN ('команда') DO команда [параметры]

Ключи могут быть следующими:

Прекращать обработку строки при появлении в ней указанного символа:

eol=<символ окончания строки>

Не обрабатывать первые n строк:

skip=<число пропускаемых строк в начале обработки каждого блока данных

Указать символы, которые обозначают границы колонок данных:

delims=<набор символов, обозначающих разделители колонок данных (по умолчанию разделителями являются символ пробела и табуляции)

Указать колонки данных, которые следует передавать в тело цикла:

tokens=порядковые номера колонок данных для каждой строки, которые будут переданы в тело цикла при каждой итерации, или символ * (звездочка).

В случае использования символа * в тело цикла будут передаваться все символы вплоть до конца строки.

Порядковые номера могут быть указаны диапазонами типа m-n (то есть от колонки с номером m до колонки с номером n).

Данные первой колонки передаются в переменную, указанную при описании цикла, данные последующих колонок передаются в автоматически создаваемые переменные, по следующему принципу: например, переменная цикла - %A, тогда вторая колонка попадет в переменную %B, третья - в %C и т.д.

Пример использования №1:

FOR /F "skip=2 eol=; tokens=2,4-5,* delims=, " %%I IN (*.txt) DO @ECHO %%I %%J %%K %%L

Будут обработаны все строки, за исключением двух первых, из каждого файла с расширением txt.

Из обрабатываемых строк будут выделены колонки данных, разделяемые символами пробел и запятая.

В тело цикла будут переданы колонки № 2, 4, 5 и все последующие. Из значения для каждой строки будут помещены в переменные I, J, K, L и выведены на экран командой ECHO.

Пример использования №2:

FOR /F " tokens=1,2 delims=," %%I IN ("Putin, Vladimir, Vladimirovich") DO @ECHO %%J %%I

Будет выведено: Vladimir Putin

Пример использования №3:

@ECHO OFF CHCP 1251

SETLOCAL EnableDelayedExpansion

FOR /F "skip=5 tokens=1,5" %%I IN ('dir') DO (

SET /A LINE_NO=LINE_NO + 1

>>Result.txt @ECHO Строка #: !LINE_NO! Данные: %%I %%J

)

Команда CHCP1251 включает режим обработки текстовых данных в кодировке 1251.

Команда SETLOCAL EnableDelayedExpansion включает режим развертывания значения переменных во время выполнения кода (позднее развёртывание), а не в момент запуска скрипта (раннее развертывание), как это действует по-умолчанию. Для использования режима позднего развёртывания переменная должна быть заключена в знаки !, а не %.

Команда DIR выводит следующее:

C:\Users\User>dir

Том в устройстве C не имеет метки.

Серийный номер тома: 2CFE-B0B6

Содержимое папки C:\Users\User

23.10.2011 10:51 <DIR> .

23.10.2011 10:51 <DIR> ..

15.10.2011 13:21 39 file1.txt

15.10.2011 13:21 7 file2.txt

Приведенный цикл будет обрабатывать все строки, которые выдает команда DIR, за исключением первых пяти. При обработке команда FOR будет из каждой строки выделять колонки, которые отделены друг от друга символами пробела или табуляции. В данном примере будут взяты колонки №1 (дата) и %5 (имя файла).

Команда SET /A LINE_NO=LINE_NO + 1 будет увеличивать значение переменной LINE_NO при каждой итерации цикла на единицу.

Команда >>Result.txt @ECHO Строка #: !LINE_NO! Данные: %%I %%J будет выводить в файл Result.txt строки вида Строка #<номер строки> Данные: <дата> <имя файла>.

Обратите внимание на то, что переменная LINE_NO обрамлена символами !. Если бы она была обрамлена символами %, то конструкция %LINE_NO% была бы заменена значением переменной LINE_NO в момент запуска скрипта и при всех итерациях цикла не менялась.