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
|