б) Проверка существования файла на диске.

А) Сравнение двух строк

ФОРМАТ: 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.