Баллада о *.BAT файлах

Я всегда брался за новый язык, чтобы овладеть новым рабочим орудием.
Мирче Элиаде

Введение
Дабы понять, что представляет собой пакетный файл, заглянем в справку Windows XP (кому, как не авторам, лучше знать, что это такое):
“Пакетный файл представляет собой неформатированный текстовый файл, содержащий одну или несколько команд и имеющий расширение имени .bat или .cmd. Когда происходит запуск этого файла, программа cmd.exe выполняет по порядку команды, записанные в файле”.

Синтаксис сценариев очень похож на многие языки программирования, и, я думаю, вам не составит труда разобраться в нем. Но пока отбросим в сторону особенности синтаксиса. Чтобы заинтересовать вас данной технологией, я расскажу о его назначении.
Предположим, у вас есть компьютер, которым пользуются несколько человек: папа, брат, мама, бабушка. Вы, как администратор этого компьютера, создали несколько учетных записей, что-то вроде root, lamer_1, lamer_2 и т.д., и каждый член семьи пользуется своей записью: запускает программы, лазит в Интернете. В итоге у каждого пользователя набивается куча мусора в папках “Temp” и “Temporary Internet Files”. Вам, как уважающему себя администратору, нужно периодически вычищать этот мусор. Можно, конечно, вручную лазить по папке профилей “Documents and Settings” и удалять лишние файлы, но этот процесс можно значительно ускорить. Например, создав пакетный файл mydelete.bat и внеся туда пару-тройку строчек. И что самое интересное, для создания такого файла не нужно ничего, кроме текстового редактора (подойдет и обычный Блокнот) и некоторых знаний. Использовать такой сценарий легко и просто, а от нудной работы он избавляет отлично.
Но это далеко не единственное применение данной технологии. Когда вы узнаете все нюансы синтаксиса и сможете виртуозно ими владеть, вы сможете писать неплохие программки, которые не раз помогут вам в быту. Только помните, что этот язык все таки не всемогущ — не стоит на нем зацикливаться…

Практика
В этой статье я не буду описывать весь синтаксис командного языка, поскольку он достаточно подробно рассмотрен в справке Windows. Я лишь покажу примеры его использования, а вы уж решайте, нужно вам это или нет.

Пример 11. Простейший сценарий:

[cc lang="winbatch"]
@echo off
rem Выводит фразу MegaByte – Rulezzz!
echo MegaByte – Rulezzz! & pause
[/cc]

@echo off – отключает режим вывода информации о работе команд, очень полезная команда; rem – с этой команды начинаются комментарии; echo – вывод текста в окне консоли; pause — приостанавливает выполнение пакетной программы до нажатия любой клавиши; знак “&” — разделитель команд. С помощью его можно сократить количество строк в коде сценария.

Пример 2. Сценарий с использованием переменных:

[cc lang="winbatch"]

rem Запрашивает число, умножает его на 10, и выводит на экран
set /p H=[NUMBER]
set /a H=%H%*10 & echo %H%
[/cc]

Команда set с параметром /p объявляет переменную H и присваивает ей значение, введенное пользователем; после знака равенства можно поставить комментарии к вводу данных. Параметр /a необходим для арифметических вычислений. Для объявления или изменения значения переменной переменная записывается без знаков “%”, во всех остальных случаях это необходимо.

Пример 3. Сценарий с использованием условного оператора:

[cc lang="winbatch"]

rem Пользователь вводит число, если оно меньше 6, то происходит запуск
rem калькулятора, иначе запускается графический редактор PAINT
set /p H=[NUMBER]
if %H% lss 6 (
calc.exe
) ELSE (
mspaint.exe
)
[/cc]

Как вы видите здесь все просто: переменная H сравнивается с цифрой 6, lss – служебное слово, эквивалент знаку “меньше” (таблицу со значениями служебных слов смотрите в справке Windows). Применение знаков “< ” и “>” здесь недопустимо, поскольку они используются консолью для иных операций.

Пример 4. Оператора цикла:

[cc lang="winbatch"]

rem Сценарий создаст в текущем каталоге файл с именем mybat.txt
rem и запишет туда 30 пронумерованных строк
for /l %%i in (1,1,30) do echo %%i string >> mybat.txt
[/cc]

Пояснение: параметр /l – задает тип цикла, т.е. перебор будет идти по принципу — (начальное значение, шаг, конечное значение); %%i – имя переменной, обязательный параметр. Необходимо использовать двойной знак “%” слева от имени переменной, иначе цикл не будет работать. Двойной знак “>”, означает, что вывод будет перенаправлен в файл, а строки дописаны в него. В случае, когда знак один, содержимое файла уничтожится, а поверх запишется строка вывода.

Пример 5. Использование меток:

[cc lang="winbatch"]

rem Вывод меню, где пользователю предлагают выбрать цвет фона.
rem Также предусмотрен выход из приложения.
:start
cls & echo [ m e n u ]
echo ===========
echo 4 – Red & echo 7 — White
echo ===========
echo 0 – Close program
set /p B=[background color]
if %B%==0 exit
color %B%0 & goto start
[/cc]

Как вы уже заметили: “:start” — это метка, точка входа в сценарий, двоеточие в начале метки обязательно; cls – команда очистки экрана. Команду exit, я думаю, все знают; color – команда задает цвет фона и текста, а goto start – перейти на метку с именем start.

Заключение
Вот я и рассказал об основных моментах написания командных файлов. Если вас заинтересовала данная технология, то я рад, что время, потраченное на эту статью, прошло не впустую.

1 Все приведенные примеры были проверены в Windows XP. Их работа в других версиях Windows не гарантируется.


Рекомендуем почитать: