Использование пакетных файлов, часть 3: команда IF
Этот совет продолжает серию статей об использовании командных файлов. Предлагаем вам (повторно) просмотреть предыдущие советы, чтобы мы могли продолжить с того места, где остановились. До сих пор мы рассмотрели следующие команды: DIR, REM, ECHO, FIND, TIME и TIMEOUT. Мы также использовали следующие операторы: вывод в файл (>), замечание (: :), без эха (@), конвейер (|) и конкатенация (&).
Наконец, мы знаем, что мы используем параметры, передаваемые в пакетный файл с помощью комбинаций% 1,% 2,% 3 и т. Д.
Этот совет будет посвящен командам, связанным с выполнением условной обработки в пакетном файле. К ним относятся IF, CHOICE, GOTO и специальный синтаксис «: label».
У меня есть очень удобный командный файл Do.bat. Это не более чем «оболочка», запускающая программы независимо от того, где они находятся.
Так, например, если я хочу запустить программу под названием Prog1.exe, я просто наберу
C:\Bat> DO Prog1
Если бы я хотел запустить Prog2.exe, я бы набрал
C:\Bat> DO Prog2
Прелесть Do.bat в том, что при его создании я ввел расположение всех программ, с которыми он должен работать. Поэтому мне не нужно помнить, например, что Prog1.exe находится в «C: \ Programs \ My Programs \ Prog1.exe», а Prog2.exe — в «D: \ Utilities \ Barry \ Prog2.exe» . Кроме того, мне больше никогда не придется вводить эти длинные имена путей.
Мой файл Do.bat выглядит так:
@ECHO OFF GOTO %1 :Prog1 "C:\Programs\My Programs\Prog1.exe" GOTO Done :Prog2 "D:\Utilities\Barry\Prog2.exe" GOTO Done :Done
Первая строка файла гарантирует, что другие строки не будут отображаться. За ней следует строка GOTO, которая принимает в качестве параметра имя метки, на которую должно быть передано управление. И так получилось, что эта метка также является параметром, который был передан Do.bat для начала. Поэтому, когда вы вызываете Do.bat и передаете «Prog1» в качестве параметра, файл .bat выполняет GOTO для метки с именем «: Prog1» (регистр не учитывается). Выполнение следует последовательно сверху вниз, поэтому следующая команда, которая будет выполнена, — это та, которая вызывает Prog1.exe. После завершения этой программы .bat-файл продолжает работу, выполняя команду «GOTO Done». Метка «: Done» — это последняя строка файла, поэтому, когда она достигает этой точки, файл .bat закрывается. (Есть команда EXIT, но если бы мы ее выполнили, она завершила бы не только файл .bat, но и весь сеанс CMD, что, вероятно, не то, что вы хотите делать.)
В качестве альтернативы вы можете использовать команду CHOICE и, возможно, создать простое меню, из которого можно выбрать, какую программу запускать. В этом случае я мог бы создать файл с именем Choice.bat, который будет выглядеть так:
@ECHO OFF ECHO Select 1 to run Prog1 ECHO Select 2 to run Prog2 ECHO Select Q to quit CHOICE /C 12Q /T 10 /D Q GOTO %ERRORLEVEL% :3 ECHO Quitting GOTO Done :2 "D:\Utilities\Barry\Prog2.exe" GOTO Done :1 "C:\Programs\My Programs\Prog1.exe" GOTO Done :Done
Команда CHOICE предлагает пользователю ввести 1, 2 или Q (по умолчанию регистр не учитывается). Любой другой символ игнорируется. Параметр / T указывает тайм-аут через 10 секунд, после чего процедура будет вести себя так, как если бы была выбрана опция Q (/ D Q говорит, что параметр по умолчанию — Q). После выполнения команды CHOICE для переменной% ERRORLEVEL% устанавливается порядковое значение выбранной опции. Таким образом, если пользователь выбрал 1,% ERRORLEVEL% устанавливается в 1; если пользователь выбрал 2,% ERRORLEVEL% устанавливается на 2; и если пользователь выбрал Q, для% ERRORLEVEL% устанавливается значение 3. Затем мы переходим к метке, обозначенной% ERRORLEVEL%, и выполняем запрошенное действие.
Я мог бы написать целый совет по команде IF, но в основном вы делаете что-то вроде:
IF arg1 operator arg2 command
где ‘arg1’ и ‘arg2’ — проверяемые аргументы, ‘operator’ — это один из EQU, NEQ, LSS, LEQ, GTR, GEQ (т.е. EQUal, Not Equal, LeSS than и т. д.), а ‘command’ — это команда командной строки.
Простой командный файл для вывода P1, если он есть, может выглядеть так:
@ECHO OFF IF [%1] EQU [] ECHO No Parameter passed IF [%1] NEQ [] ECHO Parameter P1 is '%1' GOTO:eof
(У меня есть привычка использовать [] вокруг своих аргументов, чтобы избежать определенных сложностей.)
Есть и другие разновидности IF. Например, вы можете проверить уровень ошибки, проверить, существует ли файл, включить оператор ELSE и т. Д.
В командной строке введите IF /? и вы получите хорошее представление о том, что все вы можете сделать.
Этот совет (13185) применим к Windows 7, 8 и 10.