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