CMD - Console Must Die?

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


ВЫЗОВ ФАЙЛОВ

Для вызова других командных файлов в батниках можно использовать аж три команды. Во-первых, можно просто написать имя другого батника в строке. При таком вызове выполнение текущего завершится, а вызванный пойдет на исполнение. Во-вторых, можно вызвать батник командой "call [имя батника]". Тогда выполнение текущего CMD-файла приостановится до завершения работы вызванного, а потом снова возобновится. И, наконец, в-третьих, другой батник или просто команду можно запустить на выполнение параллельно с текущим командой "start [заголовок окна] [имя батника\команды]". Тогда новый скрипт откроется в новом окне (кстати, если добавить к команде параметр /wait, то текущий батник будет ждать завершения вызванного).

МЕТКИ

Куда ж без них! Сколько нам твердили, что программирование с GOTO - отстой... Здесь г. Гейтс не оставляет нам шансов на альтернативу, придется юзать. Метки оформляются так:

:metka

goto metka

Любую метку можно вызвать командой call, делается это так:

call :metka

Тогда весь текст батника от метки и до конца будет считаться новым батником :). Заморочено, но удобно.

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

----klya.cmd----

@echo off

:dr

start klya.cmd

goto dr

----klya.cmd----

Этот зло-скриптик будет заниматься вызовом самого себя бесконечное число раз. Причем каждый вызванный им экземпляр будет заниматься тем же. Скорость ухода тачки в даун зависит только от ее мощности. До скорого ребута!

ПАРАМЕТРЫ

Помнят ли потомки ДОСа славное начинание по передаче аргументов прямо из командной строки? Помнят, да еще как. Начиная с НТшки, аргументы можно делить на части и преобразовывать, не отходя от кассы. Обращения к параметрам проходят вот так:

%1 - просто первый аргумент

%* - все аргументы

%~1 - первый аргумент с удалением кавычек ("колбаса" > колбаса)

Остальные параметры действуют, если только батнику передается имя файла (вызов типа klya.cmd dr.txt).

%~f1 - абсолютный путь к файлу

%~d1 - имя диска

%~p1 - имя каталога

%~n1 - имя файла (klya.txt > klya)

%~x1 - расширение файла (klya.txt > txt)

%~a1 - атрибуты файла

%~t1 - дата и время создания файла

%~s1 - размер файла

Все параметры комбинируются без проблем: %~dpnxs1 выдаст поделенный на части путь к файлу и его размер, и т.п.

ПОЛЕЗНЫЙ ПРИМЕР

Так как теория лучше всего познается на практике, попробуем написать небольшой файлик, который будет... Ну, скажем, будем помещать копии файла во все подкаталоги текущего каталога. Типа ты админ и раздаешь всем пользователям новые правила работы :). Подобный файл разбирается на microsoft.com, но его можно несколько улучшить. В нем будут присутствовать циклы, в следующий раз мы разберем их подробнее, а пока постарайся разобраться в том, что есть. Наш батник будет вызываться так: admin rules.txt subdir. Если не указано имя директории, будем работать в текущей.

Назад на стр. 021-068-1  Содержание  Вперед на стр. 021-068-3