CMD - Console Must Die?

Спецвыпуск Xakep, номер #021, стр. 021-068-1


c:\WINNT\system32\cmd.exe

Андрей "Дронич" Михайлюк (dronich@real.xakep.ru)

Программки, утилитки, оптимизаторы... Слащавенько получается, ребятки! Ведь винтукей замечателен не только повышенной стабильностью и нормальной многозадачностью, но и практически полноценной консолью. Ею-то мы с тобой и займемся, вспомнив дедушку ДОСа. Ну и юниксоидам нос слегка утрем - типа, мы тоже не лаптем щи хлебаем, не все нам мышой клацать :).

Юзать консоль для запуска прог - чистейшей воды моветон. Мы займемся составлением полезных командных файлов, по традиции зовущихся батниками (хотя на смену ".bat" давно пришел ".cmd"). Для начала надо освоить самые простые операторы, чем мы сегодня и займемся. Поскольку в языке написания cmd'шек многое осталось неизменным со времен ДОСа, подробно будем рассматривать только нововведения, а по остальному пробежимся для освежевания мозгов :).

Язык командных файлов состоит из двух больших частей: выполняемые команды и системные метки. Каждой из выполняемых команд соответствует одноименный экзешник ("ping" - c:\WINNT\system32\ping.exe, "find" - C:\WINNT\system32\find.exe), метки же просто распознаются системой в контексте батника (циклы, условные операторы). Можно сказать, что команд вообще не существует :), просто средствами языка вызываются нужные программы. Так оно и есть, но поскольку круг чисто служебных прог ограничен (не будешь же ты запускать тот же sleep не из батника), обзовем их командами.

ВЫВОД

Самые простые операторы - операторы вывода. В батниках для этого используется команда "echo". Для вывода на экран строки "Klya is a greatest DUM" в CMD-файле надо прописать:

echo Klya is a greatest DUM

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

echo Klya is a greatest DUM

Klya is a greatest DUM

Бороться с дублированием можно по-разному: для отключения вывода одной команды перед ней ставится "@", для отключения всех последующих надо дать команду "echo off". Так как обычно дублирующий вывод никому не нужен, в начале файла прописывают:

@echo off

Эта строка отключает дальнейший вывод и в придачу скрывает сама себя.

УСЛОВИЯ

Условный оператор, как и следовало ожидать, обзывается IF'ом и имеет такой формат:

if [строка] [условие сравнения] [строка] [команда]

В качестве условий сравнения строк применимы такие сокращения: EQU - равно, NEQ - не равно, LSS - меньше, GTR - больше, LEQ - меньше или равно, GEQ - больше или равно. Если сразу после IF поставить ключ /i, сравнялке будет наплевать на регистр строк (то есть А=а, B=b и т.д.).

Существуют еще два подвида условных операторов: "if errorlevel [индекс ошибки]" и "if exists [имя файла]". Первый нужен для обработки критических ситуаций (выяснить, что за ошибка произошла). Во времена ДОСа это условие реально пользовали только для проверки файла на существование. Вуаля - к 2000 году Билли услышал наши молитвы и ввел новый подвид IF'a - "if exists", который только и делает, что проверяет существование файла. Лучше поздно, чем никогда :).

Содержание  Вперед на стр. 021-068-2