Nextcloud私有云数据同步备份
·
一、脚本说明
1、第一次需手动运行,脚本会创建一个开机启动的任务计划,后面每次重启系统时,能够自动开启备份,不需要再手动执行;
2、创建任务计划后,启动robocopy监视,并将日志内容记录到本目录下的“backuplog”文件夹中;
3、如要复用此脚本做其他文件同步,请修改脚本文件中的源文件路径和目的文件路径;
二、脚本内容
将以下内容复制到bat脚本文件中:
@echo off
%1 mshta vbscript:CreateObject("Shell.Application").ShellExecute("cmd.exe","/c %~s0 ::","","runas",0)(window.close)&&exit
cd /d "%~dp0"
:: 源文件夹
set SOURCE_PATH="D:\Ubuntu\data"
:: 目标文件夹
set TARGET_PATH="E:\Backup\data"
:: 日志文件路径,可绝对路径,可相对路径(相对本bat文件所在目录)
set LOG_BASEPATH="backuplog"
if not exist %LOG_BASEPATH% mkdir %LOG_BASEPATH%
:: 日志文件名称(如:backuplog_20230112.txt)
:: 获取当前系统日期和时间用来创建目录,格式:年月日。如:20230112
set TIME_DIR=%date:~,4%%date:~5,2%%date:~8,2%
set LOG_FILENAME=backuplog_%TIME_DIR%.txt
:: 日志文件完整路径
set LOG_PATH=%LOG_BASEPATH%\%LOG_FILENAME%
if not exist %LOG_PATH% copy null %LOG_PATH%
:: 获取系统小时时,如果是0-9时,小时位只有一位;10-23时,才是两位,截取时需根据当前时间判断
if %time:~0,2% leq 9 (set hour=0%time:~1,1%) else (set hour=%time:~0,2%)
:: 指定备份文件删除时间(单位:天),超过该天数的文件将被删除。0 - 32768 范围内的任何数字。
set NUM=7
:: 删除指定天数之前的日志文件
:: forfiles [/p Path ] [/m SearchMask ] [/s ] [/c Command ] [/d [{+ | - }]Num]
:: [/p Path ]:指定路径,当然目录可以用“.”
:: [/m SearchMask ]:搜索方式,默认是*.*
:: [/s ]:遍历子目录进行搜索,包括当前目录
:: [/c Command ]:指定要执行的命令,格式为[ /c "cmd /c rd /s/q @path" ];双引号里面的/c后接需要执行的命令。
:: [/d -15]:查找15天之前的文件
@echo.>>%LOG_PATH%
@echo [info] %date:~,10% %hour%:%time:~3,2%:%time:~6,2% 待删除的日志文件:>>%LOG_PATH%
forfiles /P %LOG_BASEPATH% /M *_* /D -%NUM% /C "cmd /c echo @file">>%LOG_PATH%
:: "rd /s /q @path" rd:删除目录命令。/s:删除指定目录和所有子目录及其包含的所有文件。/q:安静模式,删除时不会提示确认信息。
:: forfiles /P %LOG_BASEPATH% /s /M *_* /D -%NUM% /C "cmd /c rd /s /q @path" 2>>%LOG_PATH%
@echo [info] %date:~,10% %hour%:%time:~3,2%:%time:~6,2% 删除命令执行结果:>>%LOG_PATH%
:: "del @path" del:删除文件命令。
forfiles /P %LOG_BASEPATH% /s /M *_* /D -%NUM% /C "cmd /c del @path" 2>>%LOG_PATH%
@echo [info] %date:~,10% %hour%:%time:~3,2%:%time:~6,2% 创建任务计划执行结果:>>%LOG_PATH%
:: 创建开机启动脚本
echo N|schtasks.exe /create /tn "开机启动Nextcloud备份" /ru SYSTEM /sc ONSTART /tr %~f0 >>%LOG_PATH%
:: 并发备份的线程数,默认值为8。取值为1~128
set THREAD_NUM=32
:: 执行同步检查的时间间隔,单位分钟
set MOT_MINUTE=5
:: 文件(夹)在 MON_NUM 次更改后再次运行 Robocopy
set MON_NUM=1
:: 设置每次错误时,重试的间隔秒数
set ERROR_SECOND=10
:: 开启robocopy监视
robocopy %SOURCE_PATH% %TARGET_PATH% /e /copyall /w:%ERROR_SECOND% /z /mt:%THREAD_NUM% /mir /mot:%MOT_MINUTE% /mon:%MON_NUM% /log+:%LOG_PATH%三、终止脚本
由于使用robocopy工具开启文件夹监视之后,除非用户关闭命令提示符窗口或按下Ctrl+Break键。否则会一直运行,所以编写了终止robocopy进程的脚本,如下所示:
@echo off
%1 mshta vbscript:CreateObject("Shell.Application").ShellExecute("cmd.exe","/c %~s0 ::","","runas",0)(window.close)&&exit
cd /d "%~dp0"
taskkill /f /im "Robocopy.exe"更多推荐
所有评论(0)