Использование переменных среды в пакетных файлах
Переменные среды – это имена, использованные в левой части строк среды программы. Внутри пакетного файла можно устанавливать значения этих переменных с помощью обычной команды «SET переменная=значение», можно использовать в командных строках пакетного файла переменные, значение которых либо было установлено ранее в этом же пакетном файле, либо было задано в текущей среде еще до запуска пакетного файла. Чтобы использовать значение переменной среды, следует указать ее имя со знаками «%» справа и слева (%переменная%).
Если продолжить аналогию с процедурами, переменные среды играют для пакетного файла роль глобальных переменных, областью памяти для которых служит текущая среда.
Все переменные среды являются строковыми. Только при использовании расширенной обработки команд в Windows NT появляется возможность использовать арифметические и логические операции над значениями переменных (см. команду SET).
При запуске пакетного файла система создает новую среду, которая содержит копии всех переменных текущей среды. После окончания работы пакетного файла восстанавливается прежняя среда, поэтому переменные среды не сохраняют те значения, которые они получили в ходе выполнения пакетного файла.
При выполнении пакетного файла указанные в его строках имена позиционных параметров и переменных среды заменяются их строковыми значениями (возможно, пустыми), после чего полученная строка выполняется как обычная команда консольного режима.
Пример. Пусть пользователь хочет написать пакетный файл для «мягкого» удаления ненужных файлов. Такой файл должен выполнять перенос указанного файла в специальный каталог, играющий роль «персональной корзины», аналогичной обычной корзине Windows. Пользователь впоследствии может либо вернуть файл в исходный каталог, либо действительно удалить его. Соответствующий файл SOFTDEL.BAT может содержать строки:
COPY %1 %MYDELDIR%
w:st="on"class="af4" style="font-family: 'Courier New'; font-weight: bold; "DEL %1
Пусть пользователь выполнил команды:
SET MYDELDIR=C:\DELETED
SOFTDEL *.OBJ
После подстановки параметров %1 = *.OBJ и %MYDELDIR% = C:\DELETED будут фактически выполнены команды:
COPY *.OBJ C:\DELETED
w:st="on"class="af4" style="font-family: 'Courier New'; font-weight: bold; "DEL *.OBJ
Если используется оболочка типа Norton Commander, то команду SET следовало включить в стартовый файл AUTOEXEC.BAT, выполнив ее до загрузки оболочки.
Параметр ERRORLEVEL
Любая программа для Windows при завершении своего выполнения передает операционной системе целочисленной значение, которое называется кодом завершения программы. По умолчанию код завершения равен 0, и это значение принято считать признаком нормального завершения, т.е. отсутствия каких-либо «нештатных ситуаций» при работе программы. Пользователь может предусмотреть выдачу любых значений кода завершения, при этом ненулевые коды завершения обычно означают, что в ходе работы программы произошли какие-то неприятности (например, не найден входной файл, неверный формат обрабатываемых данных и т.п.).
Если программа была запущена в диалоговом режиме, то значение кода ее завершения никак не используется, теряется. Если же программа запускалась из пакетного файла, то можно проверить значение кода завершения при помощи оператора IF ERRORLEVEL, формат которого описан ниже. Такая проверка позволяет разветвить ход дальнейшего выполнения пакетного файла в зависимости от кода завершения программы.
Оригинальное и очень полезное применение кода завершения связано с использованием команды CHOICE. Программа, вызываемая по этой команде, задает пользователю некоторый вопрос и предлагает на выбор нажать одну из нескольких клавиш в качестве ответа. После нажатия клавиши программа завершается, а код ее завершения указывает, какой из предложенных ответов был выбран пользователем. Таким образом достигается возможность выбрать один из нескольких путей дальнейшего выполнения пакетного файла по выбору пользователя.
Команды для пакетных файлов
В данном подразделе описаны команды консольного режима, которые обычно применяются только в составе пакетных файлов. Их использование в диалоге не запрещено, но, как правило, не имеет смысла.