Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   bat-скрипт для массового копирования файлов (http://forum.oszone.net/showthread.php?t=259784)

akt 01-05-2013 22:51 2143040

bat-скрипт для массового копирования файлов
 
Уважаемые гуру!

Прошу помощи в написании bat-скрипта для массового копирования файлов.

Нужно:
- в одной директории находить все файлы с расширением *.txt, созданные за прошлый месяц;
- перемещать их в отдельную папку;
- в текстовый файл выводить информацию об их количестве и суммарном объёме;
- в другой (или этот же, неважно) файл выводить информацию о количестве и суммарном объёме файлов со строкой «строка 1»;
- в другой (или этот же, неважно) файл выводить информацию о количестве и суммарном объёме файлов со строкой «строка 2»;
- запускать WinRAR на архивацию всех найденных и перемещённых файлов за прошлый месяц с максимальным сжатием;
- удалять исходные файлы после архивации файлы;

Премного благодарен за ответы!

Iska 02-05-2013 00:50 2143083

Ну, точно задание. По скольким форумам ещё разослали?

akt 02-05-2013 09:34 2143118

А что, это разве нарушение правил форума? Или вы уверены, что знающие люди посещают исключительно этот форум и других форумов не существует?
Буду признателен за ответ по существу от настоящих программистов, а не от любителей зубоскальства.

Вот, что пока удалось сделать самому:

Перемещение всех файлов по дате:
Код:

forfiles /M *.txt /D -1 /C "cmd /c move @file c:\123"
Не очень, конечно, изящно, но учитывая что скрипт будет запускаться по первым числам, конструкция /D -1 вполне годна.

Перемещение файлов, содержащих нужную строку:
Код:

@echo of
setlocal enabledelayedexpansion
for /f "tokens=*" %%a in ('findstr /M "строка 1" *.txt') do (move "%%a" c:\123)

Опять же не очень изящно перемещать для подсчёта файлы туда-сюда по папкам, но толковее пока среди инструментария bat ничего не нашёл.
Полагаюсь на знание специалистов, надеюсь, что такие здесь всё же есть.

Iska 02-05-2013 17:26 2143339

Цитата:

Цитата akt
А что, это разве нарушение правил форума? Или вы уверены, что знающие люди посещают исключительно этот форум и других форумов не существует?
Буду признателен за ответ по существу от настоящих программистов, а не от любителей зубоскальства. »

Само размещение — нет, никоим образом не нарушение. Дело в ином:
читать дальше »
бывает так, что приходят новые люди с заданием, и зараз начинается канюченье: люди добрые, помогите кто чем может, сами мы не местные препод идиот/мудак/ещё эпитеты, материал вообще не давался, сдавать лабораторку, практикум, etc надо было уже вчера. И никаких своих мыслей, никаких даже попыток разобраться. А то ещё интереснее: «срочно», «если тебе нечего сказать по делу — заткнись», «буду признателен за ответ по существу от настоящих программистов, а не от любителей зубоскальства» и т.п.

По существу — см. правила подраздела: Правила Форума, п.6. Вызвано сие не тем, что люди такие злые, а тем, что «да воздастся каждому по делам его» — поощрять халявщиков грех. Ну, и толку будет от такой помощи — ноль.

P.S. Полагаю, к Вам теперь сие не относится, поскольку:
Цитата:

Цитата akt
Вот, что пока удалось сделать самому: »



Цитата:

Цитата akt
учитывая что скрипт будет запускаться по первым числам, конструкция /D -1 вполне годна. »

Отчего сей факт был опущен в изначальном техзадании?! Не есть хорошо.


Цитата:

Цитата akt
Перемещение всех файлов по дате:
Код:

forfiles /M *.txt /D -1 /C "cmd /c move @file c:\123"
Не очень, конечно, изящно, но учитывая что скрипт будет запускаться по первым числам, конструкция /D -1 вполне годна. »

Не годна. Вы отбираете все файлы, имеющие дату модификации (а не дату создания, как в ТЗ) более раннюю, нежели сегодня — т.е. от начала времён и до вчера включительно. Строго говоря, «forfiles.exe» не годится для задания закрытого интервала — он позволяет задать только полуоткрытый (в любую сторону) интервал.

Вычисление и указание интервала дат прошлого месяца с первого числа по последнее Вам проделают более опытные коллеги — у меня аллергия на вычисление дат в пакетных файлах, предпочитаю LogParser, WSH или PowerShell.

Цитата:

Цитата akt
в текстовый файл выводить информацию об их количестве и суммарном объёме »

Количество:
Код:

dir /b "c:\123\*.txt" | find.exe /v "" /c>>"Out.txt"
Объём:
Код:

for /f "usebackq tokens=3" %%i in (`dir "c:\123\*.txt" ^| find.exe "байт" ^| find.exe "файлов"`) do echo %%i>>"Out.txt"
и т.п.

Повторюсь, корректно отобрать файлы с помощью одного только «forfiles.exe» не удастся. Переходите на WSH или PoSH (примерный код Вам набросали в другом месте).


Время: 01:34.

Время: 01:34.
© OSzone.net 2001-