Orlandovich
Newbie | Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору Здравствуйте, форумчане! Прошу помощи, в решении задачи =) Суть проблемы: хочу делать полное резервное копирование раз в неделю и инкрементное архивирование каждый день. Написал bat-файл с ключами для weekly и daily бэкапов (ну и соответственно 2 задачи в планировщике), так как не врубился как сделать одной командой. С еженедельным архивированием всё путём, а вот инкрементное архивирование не выходит. Как я вижу работу батника: например утром в ПН создается weekly0 архив (еженедельная задача), вечером в ПН создается инкрементный daily0_0 архив с опорным weekly0.zip. Всю неделю выполняется ежедневное архивирование с опорным weekly0.zip архивом. На следующей неделе создается новый weekly1.zip и он будет являться опорным. В понедельник по накатанной создается новый инкрементный daily1_0.zip, а архивы старше 7 дней удаляются. Архивы weekly и daily архивы располагаются в разных папках. Суть проблемы: как задать автоматический выбор опорного архива который не старше 7 дней. Проблема в командах выделенных знаком = Пытался сделать присвоение через команду forfiles, но её результат не заносится в переменную. Bat-файл: Код: ::Установка даты SET CurDate=%DATE:~6,4%.%DATE:~3,2%.%DATE:~0,2% SET CurTime=%TIME:~0,2%-%TIME:~3,2% SET CurDateTime=%DATE:~6,4%.%DATE:~3,2%.%DATE:~0,2%_%TIME:~0,2%-%TIME:~3,2% :: Определение режима резервного копирования SET BackupMod=%1 :: Условия для режимов резервного копирования :: Параметр "NumArc" нужен для команды forfiles и последующего удаления старых архивов if "%BackupMod%" == "Daily" ( SET NumArc=07 goto Script ) if "%BackupMod%" == "Weekly" ( SET NumArc=28 goto Script ) echo Не указан тип архивирования! Выход из программы pause exit :: Выполнение архивирования :Script :: Определение имени резервного архива типа "Backup_<Имя_директории>_<Режим_архивирования>_<Дата_создания_архива>" SET BackupFileName=Backup_Dir_%BackupMod%_%CurDateTime% :: Определение директории для хранения резервных копий с текущей датой SET DirForBackupLan=Y:\Backup\%UserName% MKDIR %DirForBackupLan% :: Определение директории, которую требуется архивировать SET BackupDir="C:\Users\user\TEST" :: РЕЗЕРВНОЕ КОПИРОВНИЕ ДИРЕКТОРИИ <ИМЯ> if "%BackupMod%" == "Daily" ( goto DailyScript ) :: Команда для еженедельного архивирования 7z.exe a -tzip -ssw -mx7 %DirForBackupLan%\%BackupMod%\%BackupFileName%.zip %BackupDir% | findstr /P /I "Everything is OK" >> %DirForBackupLan%\%BackupMod%\%BackupFileName%_log.txt :: формат архива *.zip, принудительная упаковка файлов, высока степень сжатия, создание log-файла :: Команда для инкрементного ежедневного архивирования :DailyScript ::====================================================== set RefArch=forfiles /P %DirForBackupLan%\Weekly /M *.zip /D -06 /C "cmd /c echo @FILE" 7z.exe u -tzip -ssw -mx7 %DirForBackupLan%\Weekly\*.zip -u- -up2q0r2x0y2z0w2 !%DirForBackupLan%\%BackupMod%\%BackupFileName%.zip * | findstr /P /I "Everything is OK" >> %DirForBackupLan%\%BackupMod%\%BackupFileName%_log.txt ::====================================================== :: Удаление старых файлов в директории для хранения резервных копий :: Старые файлы *.zip и *.txt удаляются если файлов каждого типа: :: для ежедневных - больше 7 :: для еженедельных - больше 4 forfiles /P %DirForBackupLan%\%BackupMod% /D -%NumArc% /C "cmd /C del /Q @FILE" :: Занесение информации об успешном выполнении скрипта в LOG файл echo Старые файлы были удалены! Архивирование прошло успешно в %CurDate% %CurTime% > %DirForBackupLan%\%BackupMod%\Main_log.txt |
|