Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ОС лабы / ОС - Лабораторная работа 2.doc
Скачиваний:
83
Добавлен:
01.06.2015
Размер:
524.8 Кб
Скачать
  1. Порядок выполнения работы

Лабораторная работа выполняется в лаборатории, оснащенной компьютерами с установленной ОС Windows. Студенты получают задание на написание пакетных файлов, изучают команды консольного режима по приведенному описанию, осваивают применение команд на практике, пишут и отлаживают пакетный файл, готовят отчет.

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

Когда студенты готовы к сдаче работы, преподаватель дает им 2-3 задания на применение команд в диалоговом режиме, проверяет выполнение заданий, а затем проверяет отчет. При выполнении заданий разрешается пользоваться данным описанием, другой литературой или справочной системой Windows. Преподаватель может задать дополнительные вопросы, выясняя уровень освоения системы команд.

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

  1. Пример выполнения лабораторной работы

Задание. Написать и отладить пакетный файл, который получает в качестве параметров одно или несколько расширений имени файла и для каждого файла в текущем каталоге, имеющего одно из заданных расширений, выполняет одно из трех действий по выбору пользователя: удаляет файл, выдает его порциями на экран или пропускает без обработки. Если же в качестве первого параметра задан ключ/R, то эти действия выполняются для файлов текущего каталога и всех его подкаталогов.

Вызов пакетного файла может выглядеть, например, так:

laba2 /R txt bat c pas

Это означает: в текущем каталоге и всех его подкаталогах обработать согласно заданию все файлы с расширениями .txt,.bat,.cи.pas.

Решение. Для выполнения поставленного задания можно использовать приведенный ниже пакетный файлLaba2.bat.

@echo off

if /%1 == / goto :SyntaxError

if /%1 == //R set RECURS=YES

call :DoIt %*

goto :eof

:DoIt

rem Рекурсивная процедура обработки каталога

rem с подкаталогами

setlocal

cd

if /%1 == //R shift

:Loop

if /%1==/ goto :EndLoop

for %%i in (*.%1) do call :ProcessFile %%i

shift

goto :Loop

:EndLoop

if /%RECURS% neq /YES goto :StopDoIt

for /D %%k in (*) do (

pushd %%k

call :DoIt %*

popd

)

:StopDoIt

endlocal

goto :eof

:ProcessFile

rem Процедура обработки одного файла

:Loop2

set /P WHAT=Файл %1 (Удалить, Выдать, Пропустить):

if /%WHAT% == /У (

del %1

goto :eof

)

if /%WHAT% == /В (

type %1 | more

goto :eof

)

if /%WHAT% neq /П goto :Loop2

goto :eof

:SyntaxError

echo Usage: laba2 [/R] ext1 [ext2 ...]

Пояснения. Файл начинается с команды “@echo off”, отключающей отображение команд в ходе выполнения. Далее проверяется, заданы ли параметры команды. Если нет, то выдается подсказка и выполнение завершается. Затем проверяется, задан ли ключ обработки подкаталогов/R. Дополнительный символ “/”, добавленный слева к обоим сравниваемым значениям, позволяет избежать синтаксической ошибки в случае пустоты параметра: вместо некорректного выражения “if == ” будет обрабатываться корректное “if / == /”. Здесь конкретный символ “/” вовсе не обязателен, столь же правильно было бы написать, например,if ы%1 == ы.

Вся остальная работа выполняется в процедуре :DoIt. Пара командsetlocalв начале иendlocalв конце обеспечивают отдельный набор переменных для каждого вызова:DoIt. Командаcdсообщает пользователю, какой каталог будет обрабатываться. Цикл между метками:Loopи:EndLoopс помощью командыshiftперебирает все параметры командной строки, задающие обрабатываемые расширения, а цикл “for %%i” перебирает все файлы текущего каталога с данным расширением. Для каждого файла вызывается процедура:ProcessFile.

Если не задан ключ обработки подкаталогов, то работа :DoItна этом завершается. Если же ключ задан, то цикл “for /D %%k” перебирает все подкаталоги текущего каталога, переходит в каждый подкаталог (pushd) с последующим возвратом (popd) и в каждом подкаталоге рекурсивно вызывает:DoIt.

Процедура :ProcessFileзапрашивает у пользователя требуемое действие с файлом (У/В/П), запоминает ответ в переменнойWHATи выполняет нужное действие. При вводе непредусмотренной буквы запрос повторяется.