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

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

Stroff 12-07-2011 17:24 1711952

Архивация папки только за текущий день
 
Всем привет.

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

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

megaloman 12-07-2011 20:07 1712035

Код:

@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 1712522

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

Stroff 13-07-2011 16:32 1712579

на ум пришло это:
Код:

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 1712594

Код:

@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 1712636

Спасибо за идею!
Вот вариант покороче, правда содержит в себе папку верхнего уровня (мало ли кому пригодится...)

Код:

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\*.*"

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


Время: 03:11.

Время: 03:11.
© OSzone.net 2001-