Раз уж обсудили создание батников, надо рассказать и об "интерактиве" - вводе данных пользователем и операторах ветвления.
Выбор варианта - CHOICE
Пользователю будет предложено ввести с клавиатуры букву варианта. Номер варианта (нумерация начинается с 1) будет записан в переменную ERRORLEVEL. Ее значение затем можно будет использовать в операторе ветвления IF, ну, или где-то еще...
CHOICE [/C список] [/N] [/CS] [/T тайм-аут /D элемент] [/M текст]
/C <список> Список выбираемых элементов. По умолчанию "YN" (да/нет).
Если будете вводить символ не из списка, компьютер будет недовольно пищать :)
/M <текст> Сообщение, отображаемое перед приглашением
/CS Включение учета регистра при выборе элементов. По умолчанию регистр символов не учитывается
/N Скрытие списка элементов в приглашении
/T <тайм-аут> Число секунд перед выбором элемента по умолчанию.
Допустимыми являются значения от 0 до 9999. Если указан 0, пауза отсутствует
/D <элемент> Элемент, выбираемый по умолчанию через nnnn секунд
Задавать вопросы пользователю научились, теперь рассмотрим:
Вывод и ввод переменных - SET
Если ввести просто SET без ключей и аргументов, то будет выдан список всех переменных среды:
Если ввести SET <начало имени переменной или полное имя переменной>, то они уже будут отфильтрованы по имени:
Если переменной, подходящей под фильтр, не существует, то команда установит ERRORLEVEL = 1.
Отмечу отдельно специальные переменные, вычисляемые динамически при использовании:
%CD% - текущий каталог
%DATE% - текущая дата с форматом команды DATE
%TIME% - текущая дата с форматом команды TIME
%RANDOM% - случайное число в диапазоне от 0 до 32767
Использование ключей позволит вводить и изменять переменные.
Ключ /A указывает, что строка справа от знака равенства является числовым выражением, значение которого вычисляется.
Список операций в порядке убывания приоритета:
() группировка
! ~ - унарные операторы
* / % арифметические операторы
+ - арифметические операторы
<< >> двоичный сдвиг
& двоичное И
^ двоичное исключающее ИЛИ
| двоичное ИЛИ
= *= /= %= += -= &= ^= |= <<= >>= присвоение
, разделитель операторов
При использовании любых логических или двоичных операторов нужно заключить выражение в кавычки.
Можно записывать шестнадцатеричные числа, используя префикс 0x, и восьмеричные, с префиксом 0.
Любые символьные строки в выражении рассматриваются как имена переменных среды, значения которых будут подставлены в выражение. Если переменная с указанным именем не существует, вместо нее будет подставлен ноль.
Ключ /P позволяет ввести значение строки с клавиатуры. Можно добавить строку-приглашение:
Довольно полезным может оказаться выделение подстроки:
%<имя переменной>:~<номер первого символа>,<длина подстроки>%
Примеры:
%MY_VAR:~0,8% - вывести первые 8 символов строки
%MY_VAR:~9% - вывести все после 9 символа
%MY_VAR:~-11% - вывести последние 11 символов
%MY_VAR:~0,-9% - вывести все, кроме последних 9 символов
Данные вводить научились, теперь используем их для ветвления программы.
Оператор ветвления - IF
Если логическое выражение после IF верно, выполняется первая команда, если неверно - то вторая команда.
Если добавить слово NOT, логическое выражение инвертируется.
IF [NOT] <логическое выражение> команда_1 ELSE команда_2
Переносить строки нельзя, но можно заключать команды в скобки. Если нужно выполнить много команд, лучше использовать GOTO.
Самое простое применение IF - сравнить переменную с числом:
Операторы сравнения следующие:
EQU или == - равно
NEQ - не равно
LSS - меньше
LEQ - меньше или равно
GTR - больше
GEQ - больше или равно
Можно сравнивать строки:
Ключ /I позволяет игнорировать регистр строк.
Можно установить в качестве условия существование файла (если файл с указанным именем существует, выполнить команду):
Условие DEFINED напоминает EXIST, но принимает в качестве аргумента имя переменной среды и возвращает истинное значение, если эта переменная определена:
Вот такой интерактив есть в CMD... В следующий раз будем использовать его для построения бэкапера :)
Ну, и напоследок, список моих статей про CMD:
- В Миниобзоре программ-терминалов первый пункт посвящен отправке и получению данных с COM-порта
- Статья о том, как проверять и активировать лицензию MS Office из CMD