Сравнение с пустой строкой. Используя в команде IF символьные имена параметров %0 - %9 следует проявлять осторожность. Например, сравнение второго параметра командного файла со строкой ‘sss’ не следует делать так:
IF %2 == sss …
Дело в том, что если в командный файл передано меньше двух параметров, тогда все символы %2 в нем будут замещены пустой строкой, и при выполнении команды возникнет ошибка из-за того, что аргумент слева от оператора ‘==’ будет отсутствовать. Правильная команда сравнения должна использовать префикс ‘-’ в аргументах:
IF -%2 == -sss ...
Эта команда работает корректно при любом значении параметра %2.
12. Диалог с пользователем в командных файлах. Команда Choice
Иногда в командном файле нужно выполнить различные действия по выбору пользователя. Это можно сделать с помощью программы Choice. Формат команды:
Choice (/C список-символов) (/Т:символ,число-секунд) сообщение
Параметры:
/C список-символов – указывает допустимые символы, которые может ввести пользователь в ответ на сообщение. Если данный параметр не указан, тогда допустимыми символами будут ‘Y’ и ‘N’. Значение переменной ERRORLEVEL, возвращаемое после завершения команды Choice, устанавливается равным порядковому номеру введенного символа в списке.
/Т:символ,число-секунд – когда этот параметр указан, тогда в качестве ответа принимается указанный символ, если пользователь по истечении времени, заданного параметром число-секунд, не нажал ни на одну клавишу.
Пример. Команда организации диалога с пользователем в пакетном файле при помощи программы Choice:
Choice /C:YN “Запустить программу ALFA”
В результате выполнения данной команды при ответе Y значение переменной ERRORLEVEL будет установлено равным 2, при ответе N – равным 1.
Замечания:
1. Если Вы желаете, чтобы при вводе символов различались прописные и строчные буквы, укажите в команде параметр /S.
2. По умолчанию к сообщению добавляется список символов (через запятую в квадратных скобках), допустимых для ответа и знак вопроса. Для того чтобы избежать этого, нужно указать в команде параметр /N.
3. Если в сообщении, которое нужно вывести на экран, имеются символы ‘/’, тогда его следует заключить в кавычки.
Пример. Покажем, как следует обрабатывать значения, возвращаемые программой Choice. В приведенном ниже примере пользователь по своему выбору запускает одну из трех игр:
@Echo off
Echo Выберите игру: D - DIGGER, Т - TETRIS, С - CAT
Choice /C:DTC "Введите символ"
IF errorlevel 3 goto cat
IF errorlevel 2 goto tet
Digger.exe
goto exit
:tet
Tetris.exe
goto exit
:cat
Cat.exe
:exit
Внимание! Проверку переменной ERRORLEVEL командами IF следует производить в порядке убывания ее возможных значений: сначала нужно проверить ее на самое большое значение, затем - на следующее по убыванию и т.д.