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  Содержание