Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

заочникиОС / Лабораторные работы / Лабораторная работа № 2

.pdf
Скачиваний:
48
Добавлен:
17.04.2015
Размер:
156.17 Кб
Скачать

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

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

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

Теоретическая часть

Любая современная операционная система (ОС) обладает набором встроенных команд, с помощью которых пользователь может общаться с машиной и выполнять действия в соответствии с определенным в системе языковыми правилам. Набор команд и степень их сложности зависят как от возможностей самой операционной системы (ОС), так и от вида интерфейса ЭВМпользователь.

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

Описание внутренних команд 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

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

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

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

Практическая часть

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

Задание 1: создайте текстовый файл (в Norton Commander -<shift>+<F4>) с именем start.bat и внесите в него вышеуказанные команды.

С командной строки исполните файл с параметрами par1 par2 par3. Результаты поместите в отчет. Отчет создавайте в редакторе Word и скопируйте в него результаты выполнения файла вместе с командной строкой.

Задание 2: создайте пакетный файл с именем Start1.bat

Следующего содержания: echo off

set val=Именованный параметр echo val

echo %val%

Выполните с командной строки start1.bat

Результаты поместите в отчет.

Оператор for. Простой командный файл. Вывод на экран текстовых строк Задание 3: создайте текстовый файл (в Norton Commander -<shift>+<F4>) с именем zikl1.bat

и внесите в него следующий текст:

for %%i in (Число_стихий Воздух Вода Земля Огонь) do echo %%i

Выполните с командной строки

zikl1.bat

Если Вы не допустили ошибок в набивке, на экране должен появиться результат без системных сообщений. Если ошибки допущены, устраните их и внесите первую строку файла zikl1.bat команду:

Echo off

Содержимое файла и результат выполнения команды zikl1.bat поместите в файл отчета.

Оператор if.

Задание4: создайте командный файл zikl2.bat

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

 

:one

 

 

 

shift

 

 

 

if "%0" == ""

goto two

 

 

type %0

 

 

 

pause

 

 

 

goto one

 

 

 

:two

 

 

 

echo

-------------Конец

 

 

печати-----------------

 

 

pause

 

 

 

Созданный командный файл предназначен для использования формальных параметров без

ограничения их числа.

 

 

С командной строки выполните zikl2.bat c:\config.sys c:\autoexec.bat

Если файл исполнен без ошибок, вставьте в первую строку команду Echo off.

Результат выполнения команды поместите в конец файла отчета.

Оператор for. Вывод на экран содержимого текстовых файлов, указанных в качестве позиционных параметров командного файла.

Задание 5: создайте командный файл Zikl3.bat

и внесите в него следующие команды: echo off

for %%i in (1 2 3) do type zikl% %i.bat

В данном примере командный файл использует параметр цикла i как переменную часть файла zikl(1 2 3).bat.

С командной строки выполните zikl3.bat

и результаты внесите в отчет.

Операторы echo, choice, if, goto. Цель: пример организации командного файла, выводящего на экран меню с указанием команд, которые следует выполнить при выборе соответствующего пункта. В данном примере разбирается командный файл, предназначенный для автоматизации режимов архивации с расположением архива на дискетах. Имя каталога, предназначенного для архивации, указывается в качестве позиционного параметра. Для выполнения задания Вам необходимо на диске C: создать папку c:\arc и поместить в нее файл arj.exe. Если работа выполняется в ОС Windows XP Prof, то дополнительно в папку Windows следует поместить файл choice.com. Где взять эти файлы, Вам укажет преподаватель.

Задание 6: Создайте файл arxiv.bat и внесите в него следующие строки: echo off

Rem Очистка экрана cls

echo . echo . :begin

echo .

 

 

 

echo

A - Создать архив на дискете %1

 

echo

X - Восстановление архива с дискет

%1

echo

L - Распечатка содержимого архива

%1

echo

H - Справка по rar

 

echo

Q - Выход из программы архивации

choice

/c:axlhq

Выбери:

 

if errorlevel 5 goto

exit

 

if errorlevel 4 goto

help

 

if errorlevel 3 goto

list

 

if errorlevel 2 goto

extract

 

if errorlevel 1 goto

creat

 

:creat

if not exist C:\Program Files\WinRAR\rar.exe goto noarj C:\Program Files\WinRAR\rar.exe a -va a:arx %1 goto begin

:extract

if not exist C:\Program Files\WinRAR\rar.exe goto noarj C:\Program Files\WinRAR\rar.exe x -va a:arx.arj

goto begin

:list

If not exist C:\Program Files\WinRAR\rar.exe goto noarj C:\Program Files\WinRAR\rar.exe L -va a:arx.arj | more goto begin

:help

if not exist C:\Program Files\WinRAR\rar.exe goto noarj C:\Program Files\WinRAR\rar.exe /?

goto begin :noarj

echo Архиватор C:\Program Files\WinRAR\rar.exe отсутствует в системе! :exit

echo Конец файла!!!

Проверьте правильность работы команды arxiv.bat без параметров: arxiv.bat

Выберите поочередно пункты меню:

1.Справка по RAR

2.Создание архива на дискете

3.Распечатка содержимого архива Поместите в отчет содержимое файла архива.

Индивидуальные задания

1. Выберите из ранее выполненных заданий подходящее и модифицируйте его так, чтобы на экран выводились данные согласно номеру варианта. Данные ввести в качестве позиционных параметров командного файла.

1.Дни недели.

2.Названия месяцев первого полугодия.

3.Названия месяцев второго полугодия.

4.Часто встречающиеся мужские имена (не менее пяти).

5.Часто встречающиеся женские имена (не менее пяти).

6.Знаки зодиака.

7.Набор продуктов питания (не менее пяти).

8.Список экзаменов зимней сессии.

9.Список зачетов зимней сессии.

10.Наиболее популярные модели автомобилей (не менее пяти).

11.Названия крупных городов России (не менее пяти).

12.Названия крупных городов Северной Америки (не менее пяти).

13.Европейские столицы (не менее пяти).

14.Континенты

15.Планеты Солнечной системы.

2.Составьте командный файл, который выводит на экран меню, состоящее из трех пунктов, с поясняющим текстом согласно номеру варианта и выполняет задания, указанные в

поясняющем тексте.

1.Работа с каталогами а) создание каталога,

б) вывод содержимого каталога, в) удаление каталога.

2.Работа с файлами

а) создание файла, б) переименование файла, в) удаление файла.

3. Работа с архивами

а) создание zip-архива,

б) просмотр содержимого zip-архива, в) удаление zip-архива.

4.Просмотр - установка атрибутов а) просмотр атрибутов файлов,

б) установка атрибута "только чтение", в) удаление атрибута "только чтение".

5.Форматирование дискеты

а) быстрое форматирование, б) полное форматирование,

в) форматирование системной дискеты. 6. Копирование файлов

а) копирование текстовых файлов, б) копирование двоичных файлов,

в) копирование с проверкой корректности.

7.Дата и время а) вывод даты,

б) вывод времени.

8.Сравнение файлов

а) сравнение двух текстовых файлов, б) сравнение двух двоичных файлов, в)

9. Изменение подсказки DOS.

а) включить в подсказку дату и время, б) включить в подсказку версию DOS, в) установить стандартную подсказку.

10.Сортировка данных, записанных в файл а) сортировать данные в прямом порядке,

б) сортировать данные в обратном порядке, в) сортировать данные по второму символу в столбце.

11.Восстановление удаленных файлов

а) показать список удаленных файлов,

б) восстановить только файлы, удаленные DOS, в) восстановить все файлы.

12. Восстановление переформатированной дискеты

а) провести быстрое форматирование дискеты

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

13.Реорганизация файловой системы на диске а) дефрагментация только файлов

б) дефрагментация как файлов, так и дискеты в целом, в) дефрагментация с перемещением скрытых файлов.

14.HELP

а) вывести список всех команд DOS, б) загрузить полный HELP.

в)

15. Работа с памятью ПК а) вывести на экран краткую информацию о загрузки памяти ПК,

б) то же, что и а) с перечислением загруженных в память программах. в) вывести полную информацию об использовании памяти ПК.

Контрольные вопросы.

1. Что такое командный файл?

2. Что такое пакетный файл?

3. Понятие внешних и внутренних команд.

4. Назначение команд CALL, CHOICE.

5. Назначение команд ECHO, FOR.

6. Назначение команд GOTO, IF.

7. Назначение команд PAUSE, REM, SHIFT.