Набросал один маленький BAT скрипт для резервного копирование папки. Внесите свои данные и через scheduler настройте расписание резервного копирования.
Ссылки
BAT скрипт для резервного копирования папки в Облако Mail.Ru
Функции
- С помощью robocopy делает резервные копии папки.
- Каждый бэкап сохраняется в отдельную подпапку вида DD.MM.YYYY_hhmmmss.
- С помощью 7-Zip архивирует резервные копии.
- Удаляет старые резервные копии.
Код
@echo off
SetLocal EnableDelayedExpansion
rem =============================
rem ====== admin variables ======
rem =============================
set DirName=my_folder
set SourceDir=C:\%DirName%
set BackupDir=B:\%DirName%\daily\
set NumFolders=10
rem =============================
rem ======== 7-Zip path =========
rem =============================
set a7z=%ProgramFiles%\7-Zip\7z.exe
rem =============================
rem == create backup directory ==
rem ==== DD.MM.YYYY_hhmmmss =====
rem =============================
set h=%time:~0,2%
set h=%h: =0%
set FullBackupDir=%BackupDir%%date%_%h%%time:~3,2%%time:~6,2%\
md %FullBackupDir%
rem =============================
rem ====== copy directory =======
rem =============================
robocopy %SourceDir% %FullBackupDir%%DirName%\ /E /ZB /J /NFL /NDL /NJH /NJS /NC /NS /NP 2>nul >nul
rem =============================
rem ====== zip directory ========
rem =============================
"%a7z%" a -tzip -bb0 -bd -sdel "%FullBackupDir%%DirName%.zip" "%FullBackupDir%" 2>nul >nul
rem =============================
rem ==== remove old folders =====
rem =============================
for /f "tokens=* delims=" %%D in ('dir %BackupDir% /ad /b /o-d') do (
if not %%D=="" (
if not !NumFolders!==0 (
set /a NumFolders-=1
) else (
rd /s /q %BackupDir%%%D 2>nul >nul
)
)
)
- DirName - название папки
- SourceDir - что бэкапим
- BackupDir - куда бэкапим
- NumFolders - сколько подпапок с бэкапами хранить
- a7z - путь к 7z.exe
Пример настройки расписания
В Task Scheduler настраиваем новое задание.
Выбираем пользователя, от имени которого будет выполняться резервное копирование. После сохранения задания нас спросят пароль от него. Ставим галку Run whether user is logged or not - запускать даже если юзер не залогинен.
В триггерах настраиваем расписание. У меня резервное копирование происходит раз в сутки.
Указываем ссылку на наш BAT файл.
Настраиваем условия.
Проверяем настройки. OK.
Теперь папка будет резервироваться раз в день. С настройкой NumFolders=10 в BAT файле мы будем хранить данные за последние 10 дней.
Если хотите хранить ежедневные и ежемесячные резервные копии - сделайте два BAT файла и два расписания резервного копирования в разные папки.
Папки с русским названием
От подписчиков:
Для бэкапа папок с русскими названиями нужно открыть Notepad++ и сохранить батник в кодировке ОЕМ 866.
Папки с пробелами
Как копировать папки с пробелами в названии? Пример:
robocopy "C:\Source Path" "C:\Destination Path" /option1 /option2...
Но:
robocopy "C:\Source Path" "C:\Destination Path\ " /option1 /option2...
или лучше используйте:
robocopy "C:\Source Path" "C:\Destination Path\\" /option1 /option2...
Проблема связана с экранированием.
https://ss64.com/nt/syntax-esc.html
Проблема с датой в английской локали
Замените
set FullBackupDir=%BackupDir%%date%_%h%%time:~3,2%%time:~6,2%\
на
set FullBackupDir=%BackupDir%%date:/=%_%h%%time:~3,2%%time:~6,2%\
или
set FullBackupDir=%BackupDir%%date:\=%_%h%%time:~3,2%%time:~6,2%\
или
set FullBackupDir=%BackupDir%%date:~4,2%.%date:~7,2%.%date:~-4%_%h%%time:~3,2%%time:~6,2%\
Или локаль в винде на русскую переведите.