Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- @echo off
- rem задаем переменные, вроде все понятно
- SET Z="C:\Program Files\7-Zip\7z.exe"
- rem Папка для хранения бэкапов
- SET BACKUPDIR="D:\Backup\Общие\Четная\"
- rem каталог который бэкапить
- SET SOURCEDIR="C:\Общие\"
- rem переменная для задания имени файла
- SET filename=work_diff_
- rem с переменной TIME1 пришлось извращаться, потому что дефолтная TIME содежит двоеточия,
- rem которые не могут содержаться в именах файлов и папок.
- rem Также от значения часа берется только вторая цифра, например если 12 часов - в H1 зпишется 2,
- rem потому что если часы состоят из одной цифры, а выводятся две - начинаются косяки.
- FOR /F "TOKENS=*" %%A IN ('TIME/T') DO SET TIME1=%%A
- SET H1=%TIME1:~0,2%
- SET M1=%TIME1:~3,2%
- set TIME1=%H1%-%M1%
- rem костыль для вывода дня недели
- set /a y=%date:~6,4%
- set /a m=1%date:~3,2%-100
- set /a d=1%date:~0,2%-100
- set /a i=(%y%-1901)*365 + (%y%-1901)/4 + %d% + (!(%y% %% 4))*(!((%m%-3)^&16))
- set /a i=(%i%+(%m%-1)*30+2*(!((%m%-7)^&16))-1+((65611044^>^>(2*%m%))^&3))%%7+1
- set weekday=%i%
- echo ====================================================
- echo %weekday%, %DATE% %TIME1% Start Backup Script
- echo ====================================================
- if %weekday%==1 goto megafull
- if %weekday%==2 goto diff
- if %weekday%==3 goto diff
- if %weekday%==4 goto diff
- if %weekday%==5 goto diff
- if %weekday%==6 goto diff
- if %weekday%==7 goto diff
- rem погнали
- :megafull
- rem если полные бекапы уже есть, следующие будем делать не с нуля, а на их основе.
- if exist "%BACKUPDIR%0_work_*.zip" (
- echo one full backup already exist
- goto full
- )
- rem создаем полный бекап с нуля
- echo ----------------------------------------------------
- echo %weekday%, %DATE% %TIME1% Creating MEGAFULL Backup 0_work_%DATE%_%TIME1%.zip
- echo ----------------------------------------------------
- %Z% a -tzip -ssw -mx5 %BACKUPDIR%0_work_%DATE%_%TIME1%.zip %SOURCEDIR%
- rem записываем имя свежего полного бекапа в файл
- del %BACKUPDIR%\last_full.txt
- @echo 0_work_%DATE%_%TIME1%.zip>%BACKUPDIR%last_full.txt
- rem удаляем файлы старше 8 дней, чтобы остались бекапы только прошлой недели
- rem eachfile.exe -purge -r -w -e -d 8 -l 0 -dir %BACKUPDIR%
- Forfiles -p %BACKUPDIR% -s -m *.zip -d -7 -c "cmd /c del /q @file"
- goto DoExit
- :full
- rem полные бекапы уже есть, следующие делам на их основе
- rem считываем из файла имя последнего полного бекапа
- set /p last_full=<%BACKUPDIR%last_full.txt
- rem делаем полный бекап на основе предыдущего
- echo ----------------------------------------------------
- echo %weekday%, %DATE% %TIME1% Creating FULL Backup 0_work_%DATE%_%TIME1%.zip на основе %BACKUPDIR%%last_full%
- echo ----------------------------------------------------
- %Z% u %BACKUPDIR%%last_full% -u- -up0q3r2x2y2z1w2!%BACKUPDIR%0_work_%date%_%TIME1%.zip -tzip -mx5 -ssw %SOURCEDIR%
- rem записываем имя свежего полного бекапа в файл
- del %BACKUPDIR%\last_full.txt
- @echo Start file>%BACKUPDIR%last_full.txt
- @echo 0_work_%DATE%_%TIME1%.zip>%BACKUPDIR%last_full.txt
- rem удаляем файлы старше 8 дней, чтобы остались бекапы только прошлой недели
- rem eachfile.exe -purge -r -w -e -d 8 -l 0 -dir %BACKUPDIR%
- Forfiles -p %BACKUPDIR% -s -m *.zip -d -7 -c "cmd /c del /q @file"
- goto DoExit
- :diff
- rem если полных бекапов нет вообще - делаем полный с нуля
- if not exist "%BACKUPDIR%0_work_*.zip" (
- echo no full backup exist, begin make full backup
- goto megafull
- )
- set /p last_full=<%BACKUPDIR%last_full.txt
- rem если есть - считываем его имя из файла и делаем дифференциальный бекап на его основе
- echo ----------------------------------------------------
- echo %DATE% %TIME1% Creating DIFF Backup 1_%filename%%DATE%_%TIME1%.zip на основе %BACKUPDIR%%last_full%
- echo ----------------------------------------------------
- %Z% u %BACKUPDIR%%last_full% -u- -up0q3r2x2y2z0w2!%BACKUPDIR%1_%filename%%date%_%TIME1%.zip -tzip -mx5 -ssw %SOURCEDIR%
- goto DoExit
- :DoExit
- echo ====================================================
- echo %DATE% %TIME1% End Backup Script
- echo ====================================================
- exit
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement