CMD - Console Must Die?

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


@echo off

rem Это комментарии :)

if (%1)==() goto :bad

if (%2)==() goto :curdir

rem Проверяем, заданы ли параметры в командной строке. Если нет файла, сваливаем на :bad.

for /F "skip=7 tokens=4" %%a in ('dir %2 /ad') do call :copyall %%a %1 %2

rem Этот дикий цикл означает: из вывода команды "dir %2 /ad" выдирать слова после четвертого знака табуляции (это будут имена), класть их в переменную %%а и передавать подпроцедуре "copyall". При этом первые семь строк вывода надо пропустить (там идет служебная инфа).

goto :eof

:curdir

for /F "skip=7 tokens=4" %%a in ('dir /ad') do call :copyall %%a %1 .

rem Тот же цикл, но мы не заморачиваемся с именем директории, считая ее текущей.

goto :eof

rem Ниже идет подпроцедура. В ней мы проверяем переданные имена директорий (не пустые ли), а также отсеиваем строки "столько-то bytes free". Затем выполняется процедура копирования файла (второй параметр для этой подпроцедуры) в поддиректорию заданной директории (первый и третий параметры).

:copyall

if (%1)==() goto :eof

if (%1)==(bytes) :eof

copy %2 %3\%1

goto :eof

:bad

echo А чего копируем-то?

goto :eof

Простенько и почти бесполезно :). В следующий раз мы займемся чем-нибудь посложнее. Жду пожеланий и комментов на мыле!

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