При включенной расширенной обработке команд (этот режим в Windows XP используется по умолчанию) имеется возможность рассматривать значения переменных среды как числа и производить с ними арифметические вычисления (используются ТОЛЬКО целые числа). Для этого используется команда SET с ключом /A. Ниже приведен пример пакетного файла add. bat, складывающего два числа, заданных в качестве параметров командной строки, и выводящего полученную сумму на экран:
@ECHO OFF.
: В переменной M будет храниться сумма.
SET /A M=%1+%2.
ECHO Сумма %1 и %2 равна %M%.
: Удалим переменную M.
SET M=.
В команде SET с ключом /A могут использоваться операции — (вычитание), * (умножение), / (деление нацело), % (остаток от деления). При использовании знака % в качестве знака операции в командных файлах он должен быть записан ДВАЖДЫ.
Рекомендуется при инициализации числовых переменных использовать ключ /A.
SET /A col=0.
Ввод значения переменной с клавиатуры
Ввод значения переменной при выполнении командного файла выполняется командой SET с ключом /P. Например, для ввода значения переменной M следует использовать команду.
SET /P M=[введите M].
Текст подсказки [введите М] будет выведен на экран.
Локальные изменения переменных
Все изменения, производимые с помощью команды SET над переменными среды в командном файле, сохраняются и после завершения работы этого файла, но действуют только внутри текущего командного окна. Также имеется возможность локализовать изменения переменных среды внутри пакетного файла, то есть автоматически восстанавливать значения всех переменных в том виде, в каком они были до начала запуска этого файла. Для этого используются две команды: SETLOCAL и ENDLOCAL. Команда SETLOCAL определяет начало области локальных установок переменных среды. Другими словами, изменения среды, внесенные после выполнения SETLOCAL, будут являться локальными относительно текущего пакетного файла. Каждая команда SETLOCAL должна иметь соответствующую команду ENDLOCAL для восстановления прежних значений переменных среды. Изменения среды, внесенные после выполнения команды ENDLOCAL, уже не являются локальными относительно текущего пакетного файла; их прежние значения не будут восстановлены по завершении выполнения этого файла.