При работе с составными выражениями (группы команд, заключенных в круглые скобки) нужно учитывать, что переменные среды в командных файлах используются в режиме раннего связывания. С точки зрения логики выполнения командного файла это может привести к ошибкам. Например, рассмотрим командный файл 1. bat со следующим содержимым:
SET a=1.
ECHO a=%a%.
SET a=2.
ECHO a=%a%.
и командный файл 2. bat:
SET a=1.
ECHO a=%a%.
(SET a=2.
ECHO a=%a%).
Казалось бы, результат выполнения этих двух файлов должен быть одинаковым: на экран выведутся две строки: «a=1» и «a=2». На самом же деле таким образом сработает только файл 1. bat, а файл 2. bat два раза выведет строку «a=1» .
Данную ошибку можно обойти, если для получения значения переменной вместо знаков процента (%) использовать восклицательный знак (!) и предварительно включить режим связывания времени выполнения командой SETLOCAL ENABLEDELAYEDEXPANSION. Таким образом, для корректной работы файл 2. bat должен иметь следующий вид:
SETLOCAL ENABLEDELAYEDEXPANSION.
SET a=1.
ECHO a=%a%.
(SET a=2.
ECHO a=!a!).
ВНИМАНИЕ! Приведенный материал необходим для правильной работы команды цикла FOR и будет использован в командных файлах!
Приостановка выполнения командных файлов
Для того, чтобы вручную прервать выполнение запущенного bat-файла, нужно нажать клавиши + или +. Однако часто бывает необходимо программно приостановить выполнение командного файла в определенной строке с выдачей запроса на нажатие любой клавиши. Это делается с помощью команды PAUSE. Перед запуском этой команды полезно с помощью команды ECHO информировать пользователя о действиях, которые он должен произвести. Например:
ECHO Вставьте дискету в дисковод A: и нажмите любую клавишу.
PAUSE.
Команду PAUSE обязательно нужно использовать при выполнении потенциально опасных действий (удаление файлов, форматирование дисков и т. п.). Например,.
ECHO Сейчас будут удалены все файлы в C: Мои документы!
ECHO Для отмены нажмите Ctrl-C.
PAUSE.
DEL «C:Мои документы*.*» .