Advertisement
Guest User

Untitled

a guest
Dec 4th, 2018
103
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Batch 4.90 KB | None | 0 0
  1. @echo off
  2. rem задаем переменные, вроде все понятно
  3. SET Z="C:\Program Files\7-Zip\7z.exe"
  4. rem Папка для хранения бэкапов
  5. SET BACKUPDIR="D:\Backup\Общие\Четная\"
  6. rem каталог который бэкапить
  7. SET SOURCEDIR="C:\Общие\"
  8. rem переменная для задания имени файла
  9. SET filename=work_diff_
  10. rem с переменной TIME1 пришлось извращаться, потому что дефолтная TIME содежит двоеточия,
  11. rem которые не могут содержаться в именах файлов и папок.
  12. rem Также от значения часа берется только вторая цифра, например если 12 часов - в H1 зпишется 2,
  13. rem потому что если часы состоят из одной цифры, а выводятся две - начинаются косяки.
  14. FOR /F "TOKENS=*" %%A IN ('TIME/T') DO SET TIME1=%%A
  15. SET H1=%TIME1:~0,2%
  16. SET M1=%TIME1:~3,2%
  17. set TIME1=%H1%-%M1%
  18.  
  19.  
  20. rem костыль для вывода дня недели
  21. set /a y=%date:~6,4%
  22. set /a m=1%date:~3,2%-100
  23. set /a d=1%date:~0,2%-100
  24. set /a i=(%y%-1901)*365 + (%y%-1901)/4 + %d% + (!(%y% %% 4))*(!((%m%-3)^&16))
  25. set /a i=(%i%+(%m%-1)*30+2*(!((%m%-7)^&16))-1+((65611044^>^>(2*%m%))^&3))%%7+1
  26. set  weekday=%i%
  27.  
  28. echo ====================================================
  29. echo %weekday%, %DATE% %TIME1% Start Backup Script
  30. echo ====================================================
  31.  
  32. if %weekday%==1 goto megafull
  33. if %weekday%==2 goto diff
  34. if %weekday%==3 goto diff
  35. if %weekday%==4 goto diff
  36. if %weekday%==5 goto diff
  37. if %weekday%==6 goto diff
  38. if %weekday%==7 goto diff
  39.  
  40. rem погнали
  41. :megafull
  42.  
  43. rem если полные бекапы уже есть, следующие будем делать не с нуля, а на их основе.
  44. if exist "%BACKUPDIR%0_work_*.zip" (
  45. echo one full backup already exist
  46. goto full
  47. )
  48.  
  49. rem создаем полный бекап с нуля
  50. echo ----------------------------------------------------
  51. echo %weekday%, %DATE% %TIME1% Creating MEGAFULL Backup 0_work_%DATE%_%TIME1%.zip
  52. echo ----------------------------------------------------
  53. %Z% a -tzip -ssw -mx5 %BACKUPDIR%0_work_%DATE%_%TIME1%.zip %SOURCEDIR%
  54. rem записываем имя свежего полного бекапа в файл
  55. del %BACKUPDIR%\last_full.txt
  56. @echo 0_work_%DATE%_%TIME1%.zip>%BACKUPDIR%last_full.txt
  57.  
  58. rem удаляем файлы старше 8 дней, чтобы остались бекапы только прошлой недели
  59. rem eachfile.exe -purge -r -w -e -d 8 -l 0 -dir %BACKUPDIR%
  60. Forfiles -p %BACKUPDIR% -s -m *.zip -d -7 -c "cmd /c del /q @file"
  61. goto DoExit
  62.  
  63. :full
  64. rem полные бекапы уже есть, следующие делам на их основе
  65.  
  66. rem считываем из файла имя последнего полного бекапа
  67. set /p last_full=<%BACKUPDIR%last_full.txt
  68.  
  69. rem делаем полный бекап на основе предыдущего
  70. echo ----------------------------------------------------
  71. echo %weekday%, %DATE% %TIME1% Creating FULL Backup 0_work_%DATE%_%TIME1%.zip на основе %BACKUPDIR%%last_full%
  72. echo ----------------------------------------------------
  73. %Z% u %BACKUPDIR%%last_full% -u- -up0q3r2x2y2z1w2!%BACKUPDIR%0_work_%date%_%TIME1%.zip -tzip -mx5 -ssw %SOURCEDIR%
  74. rem записываем имя свежего полного бекапа в файл
  75. del %BACKUPDIR%\last_full.txt
  76. @echo Start file>%BACKUPDIR%last_full.txt
  77. @echo 0_work_%DATE%_%TIME1%.zip>%BACKUPDIR%last_full.txt
  78.  
  79. rem удаляем файлы старше 8 дней, чтобы остались бекапы только прошлой недели
  80. rem eachfile.exe -purge -r -w -e -d 8 -l 0 -dir %BACKUPDIR%
  81. Forfiles -p %BACKUPDIR% -s -m *.zip -d -7 -c "cmd /c del /q @file"
  82. goto DoExit
  83.  
  84. :diff
  85.  
  86. rem если полных бекапов нет вообще - делаем полный с нуля
  87. if not exist "%BACKUPDIR%0_work_*.zip" (
  88. echo no full backup exist, begin make full backup
  89. goto megafull
  90. )
  91.  
  92. set /p last_full=<%BACKUPDIR%last_full.txt
  93.  
  94. rem если есть - считываем его имя из файла и делаем дифференциальный бекап на его основе
  95.  
  96.  
  97. echo ----------------------------------------------------
  98. echo %DATE% %TIME1% Creating DIFF Backup 1_%filename%%DATE%_%TIME1%.zip  на основе %BACKUPDIR%%last_full%
  99. echo ----------------------------------------------------
  100.  
  101. %Z% u %BACKUPDIR%%last_full% -u- -up0q3r2x2y2z0w2!%BACKUPDIR%1_%filename%%date%_%TIME1%.zip -tzip -mx5 -ssw %SOURCEDIR%
  102.  
  103. goto DoExit
  104. :DoExit
  105. echo ====================================================
  106. echo %DATE% %TIME1% End Backup Script
  107. echo ====================================================
  108. exit
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement