на экран выводится сообщение «Файл copier.bat копирует каталог C:\Programs в D:\Backup» и происходит соответствующее копирование.
При необходимости можно использовать более девяти параметров командной строки с помощью команды SHIFT, которая изменяет значения замещаемых параметров с %0 по %9, копируя каждый параметр в предыдущий. Значение %1 – в %0, %2 в %1 и т.д., 10 параметр в %9. Команда, обратная SHIFT, отсутствует, поэтому восстановить параметры уже не удастся.
Кроме того, в командных файлах можно использовать переменные окружения и объявлять собственные с помощью команды SET. Все переменные рассматриваются как строки и в Windows 9x над ними нельзя производить арифметические действия (в отличие от NT), а только конкатенацию (просто слитно 2 переменные без знака «+»). Например, в результате выполнения командного файла:
SET A=Первый
SET B=Второй
SET C=%A%%B%
ECHO Переменная С=%С%
на экран выведется «Переменная С=ПервыйВторой».
Для управления выполнением командных файлов существуют команды приостановки, перехода, условного ветвления, циклов и вызова внешних командных файлов.
Для того, чтобы прервать выполнение командного файла, надо нажать <CTRL> +<C> или <CTRL>+<Break> (в Windows NT есть команда выхода EXIT /B). Для приостановки с выдачей запроса на нажатие любой клавиши есть команда PAUSE, которую рекомендуется использовать перед выполнением потенциально опасных действий. Например:
ECHO Сейчас будут удалены все файлы в каталоге C:\Мои документы
ECHO Для отмены нажмите Ctrl-C
PAUSE
DEL “C:\Мои документы\*.*”
Для организации циклов используется конструкция:
FOR %%переменная IN ( множество ) DO команда [параметры]
Отличие от классических языков программирования в том, что не происходит регулярного приращения счетчика, а вместо этого используется заданный список значений в параметре множество. Скобки здесь обязательны, внутри которых одно или несколько строковых значений, разделенных запятыми. Например:
ECHO OFF
FOR %%i IN (Раз, Два, Три) DO ECHO %%i
напечатает следующее:
Раз
Два
Три
В качестве переменных цикла можно использовать лишь имена, состоящие из одной буквы. Как видите нет командных скобок (типа begin end), поэтому весь цикл должен быть записан в одной строке, вложенные циклы не допускаются.
В параметре множество можно представить одну или несколько групп файлов. Например, для вывода всех файлов с расширениями *.doc и *.txt:
FOR %%f IN(C:\TEXT\*.doc C:\TEXT\*.prn) DO ECHO %%f >> list.txt
Из одного командного файла можно вызвать другой просто указав его имя. Однако в этом случае управление назад не вернется, для этого существует команда CALL, с помощью которой можно в командных файлах организовать подобие подпрограмм. Например, командный файл proc.bat:
ECHO OFF
ECHO Записываем файл %1.txt
ECHO Параметр вызова: %1 > %1.txt
можно вызвать в другом пакетной файле:
FOR %%i IN (Первый, Второй, Третий) DO CALL proc.bat %%i
в результате proc.bat вызывается 3 раза и создает 3 файла – Первый. txt, Второй. txt и Третий.txt с соответствущим текстом.
Командный файл может содержать метки, начинающиеся с двоеточия («:») и команды GOTO перехода к этим меткам. Имя метки задается набором символов, следующих за двоеточием до первого пробела или конца строки. Например:
ECHO OFF
GOTO Label1
ECHO Эта строка никогда не выполнится
Label1
REM Продолжение выполнения
DIR
C помощью команды IF в пакетных файлах можно выполнять обработку условий 3 типов:
1) IF [NOT] строка1==строка2 команда
Условие считается истинным (обратите внимание на 2 знака равно) при точном совпадении обеих строк (регистр имеет значение). Строки могут быть литеральными (кавычки для них не требуются) или представлять значения переменных. Например:
IF %1%==Петя ECHO Привет, Петя!
Для предотвращения синтаксических ошибок в случае отсутствия переменных или параметров, рекомендуется при сравнении строк приписывать им вначале какой-нибудь символ, например:
IF -%MyVar%==-C:\ ECHO OK!
2) IF [NOT] EXIST файл команда
Проверка существования заданного файла (кавычки для имени также не требуются, кроме длинных). Например: