CMD - rulezzz FORever!
Спецвыпуск Xakep, номер #022, стр. 022-068-2
eol=;
задает символ конца строки (после которого остаток строки пропускается), в нашем случае - ";".
skip=7
число строк от начала файла, которые надо пропустить, у нас - 7 штук.
delims= ,
задает символы, считающиеся разделителями слов, взамен пробела и таба, мы оставляем пробел и запятую.
tokens=1,3,6-8
жуткий параметр - задает слова для обработки, в нашем случае для каждой строки на обработку пойдут первое и третье, а также с шестого по восьмое. Если в конце параметра поставить "*" (tokens=1,3,5*), то слова будут обрабатываться с последнего указанного (5) и до конца. Самое главное - для каждого из слов строки выделяется отдельная переменная. То есть если первое слово задано как %%i, все последующие будут называться %%j, %%k, %%l и так далее по возрастанию алфавита. Нетрудно посчитать, что максимальное количество слов в строке - 52 (два алфавита: a-z, A-Z).
usebackq
меняет смысл кавычек - апострофы окружают команду, одинарные кавычки - строку, а двойные - набор файлов.
Давай замутим какой-нибудь пример, устраивающий сладкую жизнь нашим врагам. Создадим для каждого файла из C:\WINNT\ три дубля с расширением LOH, BAK и LAN :) в папке C:\WINNT\BACKUP\. Поднапряжем, так сказать, NTFS'ку :).
@echo off
pushd C:\WINNT\
rem Этой командой мы сохранили текущую директорию и перешли в C:\WINNT\.
echo loh > tmp.tmp
echo bak >> tmp.tmp
echo lan >> tmp.tmp
rem Скидываем во временный файл три гадких расширения.
for %%a in (*.*) do call :makebadthing %%a
rem Тело цикла - для всех файлов вызываем подпроцедуру makebadthing c параметром "полное имя файла".
del tmp.tmp >NUL
popd
goto :eof
rem Конец :). Удаляем временный файл, возвращаемся в стартовый каталог.
:makebadthing
for /f %%b in (tmp.tmp) do copy %1 C:\WINNT\BACKUP\%~n1.%%b
goto :eof
rem Содержание процедуры: для каждой строки файла tmp.tmp выполняем такую команду:
"скопировать переданный параметр (%1 ака %%а) в файл C:\WINNT\BACKUP\[имя старого файла].[переменная цикла]". То есть имя нового файла складывается из имени старого (%~n1) и выбранного из файла расширения (%%b). Все :).
Вроде небольшое хулиганство, а счастья - полные штаны. Если прописать такой батник в автозагрузку, то через пару дней места на диске с виндами не будет вообще :). На сегодня все. В следующий раз мы будем мучить ассоциации файлов и ключи реестра. Пожелания по дальнейшему развитию рубрики принимаются на дроничсобакареалточкахакерточкару :).
ЗЫ Command Extentions по дефолту включены далеко не везде, так что если ты хочешь использовать возможности CMD-интерфейса по полной программе, придется его включить :). Делается это тремя способами:
ввести в командной строке CMD /X;
присвоить значению ключа HKEY_CURRENT_USER\Software\Microsoft\Command Processor\EnableExtensions единицу;
первой (или второй, после @echo off) строкой батника ввести SETLOCAL ENABLEEXTENSIONS.
Выбирай на вкус :).
Назад на стр. 022-068-1 Содержание
|