Этот совет продолжает серию статей об использовании командных файлов. Предлагаем вам (повторно) просмотреть предыдущие советы, чтобы мы могли продолжить с того места, где остановились. До сих пор мы рассмотрели следующие команды: 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.