А) Сравнение двух строк
ФОРМАТ: IF [NOT] <строка1>= =<строка2> <команда>
Заметим, что для сравнения строк здесь используется двойной знак равенства "= =".
Если <строка1> = = <строка2>, то выполняется <команда>. Здесь в качестве строки может выступать и замещаемый параметр.
Пример 5. Составим файл iftren.bat, который получает в качестве входного параметра либо символ "K", либо "P", и в зависимости от этого запускает соответствующую программу.
if '%1'= ='K' F:\WORK\KEYTREN\TRK
if {%1}= ={P} H:\LANG\TP\TURBO
if #%1#= =## echo ФОРМАТ: iftren K (или iftren P)
Вместо замещаемого параметра %1 подставляется либо "K", либо "P", либо пустая строка, если мы запустили BAT-файл без параметров. Первый IF проверяет, был ли параметр "K", и если да, то запускает программу «Клавиатурный тренажер». Второй IF проделывает то же самое для параметра "P" и программы TURBO. Третий IF проверяет, не был ли запущен BAT-файл без параметров, и если да, то выдает справку о правильном формате.
Задание. Создайте файл ifdir.bat, который бы в зависимости от введенного параметра командной строки ("S", "P" или "W") вызывал бы команду DIR с соответствующим параметром, а при отсутствии параметров выдавал бы напоминание о формате команды.
Команда IF часто используется вместе с GOTO.
Пример 6. Изменим файл iftren.bat из Примера 5, так чтобы перед запуском программы очищался экран и выводилось соответствующее сообщение:
@echo off
if '%1'= ='K' goto kt
if {%1}= ={P} goto tp
if *%1*= =** echo ФОРМАТ: iftren K (или iftren P)
goto end
:tp
cls
echo Загружаю TURBO PASCAL...
H:\LANG\TP\TURBO
goto end
:kt
cls
echo Загружаю программу TRK...
F:\WORK\KEYTREN\TRK
:end
Задание. Создайте файл iftren.bat из Примера 6 и проверьте три варианта выполнения этого командного файла.
б) Проверка существования файла на диске.
ФОРМАТ: IF [NOT] EXIST [<диск>][<путь>]<имя файла> <команда>
Этот вариант команды IF проверяет, имеется ли на диске файл с заданным именем и если да, то выполняется <команда>.
Пример 7. Составим файл ifexist.bat, который получает в качестве входного параметра имя файла, и если такой файл уже существует, то копирует его в файл с тем же именем, а расширением $$$. Если файл не существует, то выдается сообщение об этом:
@echo off
cls
if exist %1 goto yes
echo Такой файл не существует!
goto end
:yes
copy %1 *.$$$
:end
Задание. Создайте файл ifexist.bat из Примера 7 и проверьте два варианта выполнения этого командного файла.
8. Циклическая подстановка
В языке BAT-файлов нет полноценной команды для определения циклов. Однако, есть команда для циклического выполнения определенной команды для всех файлов из указанного множества.
ФОРМАТ: FOR %%<символ> IN (<список>) DO <команда>
Параметр <команда> - это любая допустимая команда DOS. В параметре <список> могут быть использованы любые имена (имена файлов или символьные строки), разделенные знаком пробела. Локальный аргумент <символ> может состоять только из одной латинской буквы. Имена из <списка> последовательно присваиваются локальному аргументу.
Примеры правильных заданий <списка>:
(*.doc)
(*.txt a*.bat *.exe)
(1 2 3 4 5 6 7)
(A B C D E F G H I J)
Пример 8. Последовательный вывод на экран содержимого всех TXT-файлов текущей директории.
@echo off
for %%f in (*.txt) do type %%f
В команду type %%f вместо %%f поочередно подставляются имена всех TXT-файлов текущего каталога.
Пример 9. Файл ABFG.bat позволяет создать четыре каталога: CAT-A, CAT-B, CAT-F, CAT-G, а также скопировать в них файлы, которые начинаются соответственно с A, B, F, G.
@echo off
for %%c in (A B F G) do md cat-%%c
for %%f in (A*.*) do copy %%f cat-A
for %%f in (b*.*) do copy %%f cat-b
for %%f in (f*.*) do copy %%f cat-f
for %%f in (g*.*) do copy %%f cat-g
Задание. Создайте командный файл ABFG.bat и проверьте его работу.
Составьте другой командный файл, с помощью которого можно удалить все каталоги, созданные файлом ABFG.bat.
9. Вызов BAT-файла из другого BAT-файла
Из тела одного BAT-файла можно вызвать другой. Это может потребоваться, например, если нужно в команде циклической подстановки выполнить не одну, а несколько команд. Существует два способа вызова одного командного файла из другого.
а) В командном файле пишется имя вызываемого BAT-файла (с параметрами, если они есть). При этом управление передается в вызываемый BAT-файл и после достижения его конца НЕ возвращается в главный BAT-файл. Чтобы такой возврат произошел, нужно
б) Вызывать BAT-файл с помощью команды CALL:
ФОРМАТ: CALL <имя вызываемого BAT-файла> [<список параметров>]
Задание. Создайте BAT-файл с вызовом другого BAT-файла. Сначала используйте вариант вызова без, а затем с использованием команды CALL.