visualSVN服务器备份脚本,修复bug亲测可用

it2024-01-19  62

这个脚本的原始版本在网上可以找到, 但是现在windows10 已经不支持AT这个命令,更新为schtasks,同时修复了时间包含空格时出错的bug,所以路径全部用 " "包含,亲测可用。 脚本如下:

@echo off :: 关闭回显 :: 说明:如有命令不明白,请使用帮助命令:命令/? 。如:for/? :: 设置标题 title SVN备份脚本 rem 设置变量 :: SVN_HOME svn程序的安装路径,指定到bin目录上一级。(如果路径有空格,请用""。) set SVN_HOME=C:\Program Files\VisualSVN Server :: SVN库的路径 set SVN_ROOT=D:\SVN\Repositories :: 备份SVN父目录的路径 set SVN_BACKUP_ROOT=D:\SVN\Backup :: 获取当前系统日期和时间用来创建目录,格式:年月日_时分秒毫秒。如:20131129_16275274 set TIME_DIR=%date:~,4%%date:~5,2%%date:~8,2%_%time:~,2%%time:~3,2%%time:~6,2%%time:~9,2% :: SVN备份子目录的路径 set BACKUP_DIRECTORY=%SVN_BACKUP_ROOT%\%TIME_DIR% :: 日志文件路径(将日志和备份文件放在一个目录,删除时一起删除了) set LOG=%BACKUP_DIRECTORY%\backup.log :: 指定备份文件删除时间(单位:天)。0 - 32768 范围内的任何数字。 set NUM=30 rem 开始备份SVN :: 判断SVN程序是否存在 if not exist "%SVN_HOME%" goto error goto start :start :: 查询日志大小(单位:字节),超过1Mb就新建一个 (日志放入备份目录后,此语句无效。仅备份!) :: for /r "%SVN_BACKUP_ROOT%" %%I in (backup.log) do if %%~zI GEQ 1048576 ren "%LOG%" "backup_%TIME%.log" :: 新建目录 mkdir "%BACKUP_DIRECTORY%" :: 建立日志 :: 备份SVN版本库并输出日志到文件 for /d %%i in ("%SVN_ROOT%\*") do ( @echo 备份 %%~ni 库,备份文件名:%%~ni.dmp >>"%LOG%" :: 完整备份(增量备份在dump后面添加参数 --incremental) "%SVN_HOME%\bin\svnadmin" dump "%SVN_ROOT%\%%~ni" >"%BACKUP_DIRECTORY%\%%~ni.dmp" 2>>"%LOG%" ) :: 输出备份命令退出码,用来判断是否备份成功。成功的退出码为0. :: 自动设置计划任务:每天凌晨3点备份服务器代码。 schtasks /create /tn "backupsvn" /tr %~f0 /sc daily /st 03:00:00 /f >>"%LOG%" schtasks /query /FO LIST /V /TN "backupsvn">>"%LOG%" ::at 23:00 /next:S %~f0>>"%LOG%" :: 删除过期备份 goto delete :delete :: 输出要删除的目录到日志文件 forfiles /P "%SVN_BACKUP_ROOT%" /M *_* /D -%NUM% /C "cmd /c echo 删除文件夹:@file">>"%LOG%" :: 使用rd命令删除超过%NUM%天的备份目录。如果不存在匹配条件的目录,将提示:错误: 用指定的搜索标准没有找到文件。如果存在匹配的文件,则提示:目录名无效 forfiles /P "%SVN_BACKUP_ROOT%" /M *_* /D -%NUM% /C "cmd /c rd /s/q @path" 2>>"%LOG%" goto end :error echo [error]"%date:~,10% %time:~,2%:%time:~3,2%:%time:~6,2%"程序目录不存在,请检查:"%SVN_HOME%">>"%LOG%" goto end :end :: 输出一行空行分割日志 @echo. >>"%LOG%" exit :: 调试脚本用的命令 :: at 16:06 %~f0 :: PAUSE :: exit
最新回复(0)