PDA

Показать полную графическую версию : [решено] Архивация папки только за текущий день


Stroff
12-07-2011, 17:24
Всем привет.

Встала такая задача:
Есть папка, в которую тулзой бэкапятся данные по схеме - новый день->новая папка с файлами.
В итоге необходим батник архивирующий папку и переписывающий созданный архив на внешнее хранилище с последующим удалением созданного архива.
Вся проблема в том, что папку архивировать нужно только за текущий день.

Буду благодарен за любые идеи

megaloman
12-07-2011, 20:07
@Echo off

Set Kuda=\\Server\Backup.arc
Set Otkuda=C:\Backup

Set Rar="C:\Program files\Winrar\Winrar.exe" a -r -tn1d

FOR /F "usebackq tokens=1,2,3 delims=./-" %%i IN ('%Date%') DO Start "Упаковка" %Rar% "%Kuda%\%%k%%j%%i" "%Otkuda%\*.*"
Kuda-куда пишем упакованные бэкапы за сегодня с именем ГГГГММДД
Otkuda-где исходные бэкапы
Пути пишем в конце без \ и без пробелов
Архив создаём сразу на внешнем хранилище. Поэтому ничего не удаляем. Конкретизируйте задачу, если что-то не нравится.

Stroff
13-07-2011, 15:11
близко но немного не то :)
конкретизирую задачу.
1. Ищем в C:\Backup папку за текущую дату.
2. Архивируем содержимое этой папки в архив (там могут быть не только файлы, но и папки - соответственно структура должна быть сохранена). Название архива присваивается по имени этой папки (она УЖЕ именуется по формату ГОДМЕСЯЦЧИСЛО). Крайне желательно, чтобы архив не содержал в себе папку верхнего уровня (если отталкиваться от нашего примера, то не должен содержать в себе папку Backup), а начинался сразу с содержимого архивируемой папки.
3. Перемещаем созданный архив на внешнее хранилище.

Stroff
13-07-2011, 16:32
на ум пришло это:
Set Kuda=C:\Temp2
Set Otkuda=C:\Test
Set Rar="C:\Program files\Winrar\Winrar.exe" a -tn1d
FOR /F "tokens=*" %%G IN ('dir /b %Otkuda%') DO Start "Packing" %Rar% "%Kuda%\%%G.rar" "%Otkuda%\%%G\*.*"

но как быть, если архиватор 7z??, в идеале его-то мне и надо использовать

megaloman
13-07-2011, 16:53
@Echo off
Set Kuda=\\Server\Backup.arc
Set Otkuda=C:\Backup

Set Rar="C:\Program files\Winrar\Winrar.exe" a -r -ep1

FOR /F "usebackq delims=" %%d IN (`Dir %Otkuda%\*.* /b /A:D`) DO Call :DirToDay "%Otkuda%\%%d" "%%d"
GoTo :Eof

:DirToDay
FOR /F "usebackq tokens=1,2" %%i IN ('%~t1') DO Set DateDir=%%i
If %DateDir%==%Date% (
%Rar% "%Otkuda%\%~2" %1
Echo Move /Y "%Otkuda%\*.rar" "%Kuda%\"
Move /Y "%Otkuda%\*.rar" "%Kuda%\"
)
GoTo :Eof Этот вариант найдёт папку(и), изменённую сегодня, упакует её (их, каждую по отдельности) с именем папки, переместит куда укАжите. Первый вариант, не считая имени, практически делает то же самое, единственное, в Rar добавить ключ -ep1 , чтобы в архиве не было базовой директории.
Можете в этом решении использовать 7z, но в строке Set Rar=... пропишите вызов и ключи для 7Z и в Move пропишите нужное расширение. Доберусь до 7Z, приведу решение и с ним (я его ключи не знаю), это совершенно не принципиально.
В первом решении 7Z не прокатит, там нет ключа, аналогичного -tn1d

Stroff
13-07-2011, 18:12
Спасибо за идею!
Вот вариант покороче, правда содержит в себе папку верхнего уровня (мало ли кому пригодится...)


Set Kuda=\\Server\Backup.arc
Set Otkuda=C:\Backup
Set Rar="C:\Program files\Winrar\Winrar.exe" a -tn1d -ep
FOR /F "tokens=*" %%G IN ('dir /b %Otkuda%') DO Start "Packing" %Rar% "%Kuda%\%%G.rar" "%Otkuda%\%%G\*.*"

Вообщем, тему можно закрыть




© OSzone.net 2001-2012