Найти тему

BAT скрипт для резервного копирования папки в Облако Mail.Ru

Оглавление

Есть у меня скрипт для резервного копирования папки на соседний диск:

BAT скрипт для резервного копирования папки

Этот скрипт мне ежедневно делает резервную копию папки на примонтированный диск. Я решил немного усилить безопасность и добавить автоматическое еженедельное резервное копирование папки в Облако Mail.Ru. Поскольку я не любитель лишнего софта, то делать бэкап будем обычным BAT файлом. Принцип действия скрипта прост:

  1. Монтируем облачный диск в качестве обычного локального диска по протоколу WebDAV.
  2. Архивируем с помощью 7-Zip нужную папку на примонтированный диск, разбивая архив на файлы по 2 ГБ.
  3. Удаляем старые архивы.
  4. Демонтируем облачный диск.

Для того, чтобы скрипт заработал, нужно выполнить подготовительные работы. Нужно установить архиватор и настроить работу WebDAV.

Подключаем Облако Mail.Ru через WebDAV с помощью командной строки

7-Zip

7-Zip - бесплатный архиватор

Архиватор позволит загружать бэкап в облако в виде архива, тем самым экономя место в облаке. Одновременно с этим архиватор разобьёт архив на файлы по 2 ГБ, по протоколу WebDAV всё равно не получится загрузить файл больше 4 ГБ, по крайней мере в Облако mail.ru.

Подготовка служб

Сперва нужно проверить, работает ли у вас служба Веб-клиент (WebClient).

services.msc
-2

Находим её в списке служб.

-3

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

-4

Меняем тип запуска на автоматический, и запускаем службу.

Если вы работаете на сервере, то служба Веб-клиент (WebClient) по умолчанию в серверных операционных системах Windows не установлена. Устанавливаем и запускаем:

Установка WebDAV клиента на Windows Server 2016

Генерируем пароль приложения

Для того, чтобы подключиться к облаку через WebDAV, нужно сгенерировать специальный пароль. По сути, мы будем неким сторонним приложением, которому нужно дойти в облако. Логинимся в браузере в свой ящик mail.ru и переходим на страницу:

https://account.mail.ru/user/2-step-auth/passwords/

-5

Добавить.

-6

Придумываем название для приложения. Продолжить.

-7

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

-8

Пароль сгенерирован, копируем его, он нам пригодится. Пароль выглядит как-то так: FKh63KgDL4JgDLWJjdJ2.

-9

Таких паролей можно сгенерировать сколько угодно, и удалить потом, когда надобность в них отпадёт.

Код

@echo off
SetLocal EnableDelayedExpansion

rem =============================
rem ====== admin variables ======
rem =============================

set CloudURL=https://webdav.cloud.mail.ru/
set CloudPassword=FKh63KgDL4JgDLWJjdJ2
set CloudUser=example@mail.ru
set LocalDriveLetter=O
set FileName=web
set SourceDir=C:\web
set BackupDir=%LocalDriveLetter%:\backup\internet-lab.ru\
set NumFolders=2
rem =============================
rem ======== 7-Zip path =========
rem =============================

set a7z=%ProgramFiles%\7-Zip\7z.exe

rem =============================
rem ======== open cloud =========
rem =============================

net use %LocalDriveLetter%: %CloudURL% %CloudPassword% /user:%CloudUser% 2>nul >nul

rem =============================
rem == create backup directory ==
rem ======= YYYY-MM-DD ==========
rem =============================

set h=%time:~0,2%
set h=%h: =0%
set FullBackupDir=%BackupDir%%date:~6,4%-%date:~3,2%-%date:~0,2%-%h%%time:~3,2%%time:~6,2%\
md %FullBackupDir%

rem =============================
rem ====== zip directory ========
rem =============================

"%a7z%" a -tzip -v2g -bb0 -bd "%FullBackupDir%%FileName%.zip" "%SourceDir%" 2>nul >nul

rem =============================
rem ==== remove old folders =====
rem =============================

for /f "tokens=* delims=" %%D in ('dir %BackupDir% /ad /b /o-n') do (
if not %%D=="" (
if not !NumFolders!==0 (
set /a NumFolders-=1 ) else (
rd /s /q %BackupDir%%%D 2>nul >nul
)
)
)

rem =============================
rem ======= close cloud =========
rem =============================

net use %LocalDriveLetter%: /delete /y 2>nul >nul
  • CloudURL — ссылка для подключения к облаку по WebDAV, для Облака mail.ru это https://webdav.cloud.mail.ru/
  • CloudPassword — сгенерированный нами ранее пароль для приложения, который используется при подключении WebDAV
  • CloudUser — наш ящик mail.ru, который используется в качестве имени пользователя WebDAV
  • LocalDriveLetter — имя локального диска, под которым подключаем облачный диск, я подключаю как O:\
  • FileName — название файла архива, который будем создавать
  • SourceDir — что бэкапим
  • BackupDir — куда бэкапим, я бэкаплю в смонтированный облачный диск по пути O:\backup\internet-lab.ru\
  • NumFolders — сколько папок с бэкапами хранить, я буду хранить две папки
  • a7z — путь к 7z.exe
  • -v2g — архив разбивается на части по 2 Гб, можно задать свой размер

При желании скрипт можно модифицировать для подключения к любому источнику WEBDAV.

Есть несколько моментов, которые следует иметь в виду:

Сначала мы делаем бэкап, а затем удаляем старый. Соответственно, в облаке должно быть место для NumFolders+1 бэкапов.
Протокол WebDAV не передаёт дату создания папки, поэтому для определения старых (на удаление) папок используется само название папки в виде YYYY-MM-DD. Скрипт сортирует папки по имени в обратном порядке и пропускает первые NumFolders штук, остальные удаляет. В общем, не меняйте название.
Название папки генерируется из текущей даты формата DD.MM.YYYY и времени чч:мм:сс,сс, если ваш Windows использует другой формат данных, то вам нужно модифицировать скрипт для формирования корректного названия папки.
Скрипт удаляет всё что лежит в BackupDir, не храните там что-то ещё!

Проверим как работает скрипт, запустим его несколько раз.

-10

Скрипт работает.

-11

Пример настройки расписания

В Task Scheduler настраиваем новое задание.

-12

Выбираем пользователя, от имени которого будет выполняться резервное копирование. После сохранения задания нас спросят пароль от него. Ставим галку Run whether user is logged or not — запускать даже если юзер не залогинен.

-13

В триггерах настраиваем расписание. У меня резервное копирование происходит раз в неделю по воскресеньям в 12:00.

-14

Указываем ссылку на наш BAT файл.

-15

Настраиваем условия.

-16

Проверяем настройки. OK.

Теперь папка будет резервироваться раз в неделю. С настройкой NumFolders=2 в BAT файле мы будем хранить два последних бэкапа.

Источник:
https://internet-lab.ru/bat_folder_backup_cloud

💰 Поддержать проект

Если вам понравилась статья, то ставьте 👍🏻 каналу.
Пишите комментарии, задавайте вопросы, подписывайтесь.