Бэкап файлов и папок одним батником с помощью 7zip

7zip
Ранее я уже писал о бэкапе с помощью 7zip, но вот мне понадобилось поставить в планировщик бэкап нескольких папок в разных местах, и делать бэкап в разное время. Конечно можно было бы создать под каждую папку свой батник, и запускать его в планировщике, а что делать если таких папок 10 или больше?? Это же как захламиться папка со скриптами… Поэтому данный подход не очень удобен, да и не наш это метод, ведь все должно быть красиво ))

Данный батник содержит в себе все папки, которые мы будем бэкапить, и каждая папка бэкапится передачей параметра батнику, естественно все делается с помощью моего любимого 7zip.

В этот раз я решил как можно больше абстрагироваться от системы, поэтому все необходимое (7z.exe, 7z.dll, forfiles.exe) находится в папке со скриптом, и запускается оттуда же. Все что бэкапим находится тут (C:\files), а бэкапим сюда (D:\Backups).

Параметры передаются через пробел, без кавычек или каких то иных символов, в планировщике все делается точно так же.

Backup.bat

 

 

 

 

 

 

 

Ну и сам скрипт:

:: Каталог с бэкапами и логами.
set P="D:\Backups"
set L="C:\Scripts\Logs"

:: Формирование времени (это надо на случай, если есть необходимость формировать имя выходного архива с указанием точного времени создания, 
:: например, если бэкапы делаются несколько раз в день)
set h=%TIME:~0,2%
set m=%TIME:~3,2%
set s=%TIME:~6,2%
set curtime=%h%-%m%-%s%

:: Удаление бэкапов старше 30 дней и запись отчета в лог, если подходящих по параметров файлов нет, то в лог пишется: (ERROR: No files found with the specified search criteria.).
forfiles.exe -p %P%\ -s -m *.* -d -30 -c "cmd /c del /Q @FILE" > %L%\clear_log_%date%.txt 2>&1

:: Список возможных параметров передаваемых скрипту.
if "%1"=="manager" GOTO manager
if "%1"=="sklad" GOTO sklad
if "%1"=="all" GOTO all
if "%1"=="docs" GOTO docs

:: Если скрипт был запущен без параметров, то производится очистка бэкапов старше 30 дней и выход.
echo При запуске без параметров архивация не производится, производится только очистка старых бэкапов.
exit

:: Подобные этой (echo manager_%date%_%time% >> %L%\manager_log_%date%.txt) строчки в скриптах записывают время начала и окончания бэкапа секции.
:: Это дает возможность замерить время работы сеуции, и настроить задания в планировщике так, что бы они не пересекались.
:: Помимо времени в логи пишутся только ошибки.

:: Если передать скрипту параметр manager, то срабатывает данная секция.
:manager
echo Время начала manager_%date%_%time% >> %L%\manager_log_%date%.txt
7z.exe a -t7z -m0=LZMA2:mt=2 -mx=4 %P%\manager\manager_%date%.7z -ssw C:\files\manager 2>> %L%\manager_log_%date%.txt
echo Время окончания manager_%date%_%time% >> %L%\manager_log_%date%.txt
exit

:: Если передать скрипту параметр sklad, то срабатывает данная секция.
:sklad
echo Время начала sklad_%date%_%time% >> %L%\sklad_log_%date%.txt
7z.exe a -t7z -m0=LZMA2:mt=2 -mx=4 %P%\sklad\sklad_%date%.7z -ssw C:\files\sklad 2>> %L%\sklad_log_%date%.txt
echo Время окончания sklad_%date%_%time% >> %L%\sklad_log_%date%.txt
exit

:: Если передать скрипту параметр all, то срабатывает данная секция.
:all
echo Время начала all_%date%_%time% >> %L%\all_log_%date%.txt
7z.exe a -t7z -m0=LZMA2:mt=2 -mx=4 %P%\all\all_%date%.7z -ssw C:\files\all 2>> %L%\all_log_%date%.txt
echo Время окончания all_%date%_%time% >> %L%\all_log_%date%.txt
exit

:: Если передать скрипту параметр docs, то срабатывает данная секция.
:docs
echo Время начала docs_%date%_%time% >> %L%\docs_log_%date%.txt
7z.exe a -t7z -m0=LZMA2:mt=2 -mx=4 %P%\docs\docs_%date%.7z -ssw C:\files\docs 2>> %L%\docs_log_%date%.txt
echo Время окончания docs_%date%_%time% >> %L%\docs_log_%date%.txt
exit

Надеюсь что данный скрипт будет кому то полезен, если что, пишите в комменты. Скачать все это добро в готовом виде можно тут.

Смотрите так же:

Бэкап файлов и папок одним батником с помощью 7zip: 1 комментарий

  1. Замечательный блог у вас!
    Просто в тему бэкапов.
    Пользуюсь COBIAN.
    Обратите внимание на это free приложение.
    Скрипты там ваши тоже пригодятся)

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Этот сайт использует Akismet для борьбы со спамом. Узнайте как обрабатываются ваши данные комментариев.