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

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

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

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

При обращении к значению переменной среды в пакетном файле имя переменной должно быть заключено между символами “%” (см. пример ниже)

Пример. Пусть пользователь хочет написать пакетный файл для «мягкого» удаления ненужных файлов. Такой файл должен выполнять перенос указанного файла в специальный каталог, играющий роль «персональной корзины», аналогичной обычной корзинеWindows. Пользователь впоследствии может либо вернуть файл в исходный каталог, либо действительно удалить его. Соответствующий файл SOFTDEL.BAT может содержать строки:

COPY %1 %MYDELDIR%

DEL %1

Пусть пользователь выполнил команды:

SET MYDELDIR=C:\DELETED

SOFTDEL *.OBJ

После подстановки параметров %1 = *.OBJи%MYDELDIR% = C:\DELETEDбудут фактически выполнены команды:

COPY *.OBJ C:\DELETED

DEL *.OBJ

      1. Параметр errorleveLи переменная %errorlevel%

Любая программа для Windowsпри завершении своего выполнения передает операционной системе целочисленное значение, которое называется кодом завершения программы. По умолчанию код завершения равен 0, и это значение принято считать признаком нормального завершения, т.е. отсутствия каких-либо «нештатных ситуаций» при работе программы. Пользователь может предусмотреть выдачу любых значений кода завершения, при этом ненулевые коды завершения обычно означают, что в ходе работы программы произошли какие-то неприятности (например, не найден входной файл, неверный формат обрабатываемых данных и т.п.).

Если программа была запущена в диалоговом режиме, то значение кода ее завершения никак не используется, теряется. Если же программа запускалась из пакетного файла, то можно проверить значение кода завершения при помощи оператора IF ERRORLEVEL, формат которого описан ниже. Такая проверка позволяет разветвить ход дальнейшего выполнения пакетного файла в зависимости от кода завершения программы.

Другим (более новым и удобным) способом проверки кода завершения программы является анализ содержимого переменной среды %ERRORLEVEL%. Значением этой переменной является строковое представление текущего значения кода ошибки. Это значение можно использовать в условном оператореIF. Кроме того, интерпретируемый характер языка команд позволяет делать вещи, которые невозможны в компилируемом языке типаCилиPascal. Например, команда “GOTO :Label%ERRORLEVEL%” фактически означает следующее: если код завершения предыдущей команды был равен 0, то перейти на метку:Label0; при коде завершения 1 перейти на метку:Label1; при коде 2 – на метку:Label2и т.д.