2015-12-08更新:备份时添加--revision head 只备份最新的版本,已从脚本中移除。

2013-12-09更新:forfiles命令添加错误输出日志。

2013-12-04更新:添加自动删除过期备份,修改输出日志时间的bug。

不会脚本的去科普下吧:点我去科普

最近有个任务,要在windows系统上备份Svn。如果每次都自己去执行麻烦死了。折腾了1周,终于搞定了这个脚本!

说明:这个脚本是全部备份的脚本。如果想增量备份,自己改备份的参数:svnadmin dump --incremental

本脚本实现了自动添加计划任务备份,自动删除多少天前的备份,保留备份日志。

你需要做的是新建一个bat文件(取什么名字、放在哪儿随便你,脚本做了通配的\(^o^)/~),然后把下面的内容复制粘贴,然后改改基本变量就可以用了。

下面的是全部的脚本:

@echo off
:: 关闭回显 :: 说明:如有命令不明白,请使用帮助命令:命令/? 。如:for/? :: 设置标题
title SVN备份脚本 by zjl rem 设置变量 :: SVN_HOME svn程序的安装路径,指定到bin目录上一级。(如果路径有空格,请用""。)
set SVN_HOME="D:\Program Files\VisualSVN Server"
:: SVN库的路径
set SVN_ROOT=D:\Repositories
:: 备份SVN父目录的路径
set SVN_BACKUP_ROOT=D:\svn_bak
:: 获取当前系统日期和时间用来创建目录,格式:年月日_时分秒毫秒。如:20131129_16275274
set TIME_DIR=%date:~,%%date:~,%%date:~,%_%time:~,%%time:~,%%time:~,%%time:~,%
:: SVN备份子目录的路径
set BACKUP_DIRECTORY=%SVN_BACKUP_ROOT%\%TIME_DIR%
:: 日志文件路径(将日志和备份文件放在一个目录,删除时一起删除了)
set LOG=%BACKUP_DIRECTORY%\backup.log
:: 指定备份文件删除时间(单位:天)。 - 范围内的任何数字。
set NUM= 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 ren %LOG% backup_%TIME%.log
:: 新建目录
mkdir %BACKUP_DIRECTORY%
:: 建立日志
@echo [info]%date:~,% %time:~,%:%time:~,%:%time:~,%建立备份目录:%BACKUP_DIRECTORY% >>%LOG%
:: 备份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 >>%LOG%
)
:: 输出备份命令退出码,用来判断是否备份成功。成功的退出码为0.
@echo [info]%date:~,% %time:~,%:%time:~,%:%time:~,%退出码为:%errorlevel%>>%LOG%
:: 自动设置计划任务:每周六 晚上11点执行本脚本。修改请参考:http://www.doc88.com/p-052298888776.html
at : /next:S %~f0>>%LOG%
:: 删除过期备份
goto delete :delete
:: 输出要删除的目录到日志文件
@echo [info]%date:~,% %time:~,%:%time:~,%:%time:~,%删除%NUM%天前的备份:>>%LOG%
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:~,% %time:~,%:%time:~,%:%time:~,%程序目录不存在,请检查:%SVN_HOME%>>%LOG%
goto end :end
:: 输出一行空行分割日志
@echo. >>%LOG%
exit
:: 调试脚本用的命令
:: at : %~f0
:: PAUSE
:: exit

输出日志如下:

[info]-- ::51建立备份目录:D:\svn_bak\20131204_14405196
备份 accounts 库,备份文件名:accounts.dmp * Dumped revision .
备份 community 库,备份文件名:community.dmp
WARNING 0x0001: Mergeinfo referencing revision(s) prior to the oldest dumped revision (r2767). Loading this dump may result in invalid mergeinfo.
WARNING 0x0001: Mergeinfo referencing revision(s) prior to the oldest dumped revision (r2767). Loading this dump may result in invalid mergeinfo.
WARNING 0x0001: Mergeinfo referencing revision(s) prior to the oldest dumped revision (r2767). Loading this dump may result in invalid mergeinfo.
WARNING 0x0001: Mergeinfo referencing revision(s) prior to the oldest dumped revision (r2767). Loading this dump may result in invalid mergeinfo.
WARNING 0x0001: Mergeinfo referencing revision(s) prior to the oldest dumped revision (r2767). Loading this dump may result in invalid mergeinfo.
WARNING 0x0001: Mergeinfo referencing revision(s) prior to the oldest dumped revision (r2767). Loading this dump may result in invalid mergeinfo.
WARNING 0x0001: Mergeinfo referencing revision(s) prior to the oldest dumped revision (r2767). Loading this dump may result in invalid mergeinfo.
WARNING 0x0001: Mergeinfo referencing revision(s) prior to the oldest dumped revision (r2767). Loading this dump may result in invalid mergeinfo.
WARNING 0x0001: Mergeinfo referencing revision(s) prior to the oldest dumped revision (r2767). Loading this dump may result in invalid mergeinfo.
WARNING 0x0001: Mergeinfo referencing revision(s) prior to the oldest dumped revision (r2767). Loading this dump may result in invalid mergeinfo.
WARNING 0x0001: Mergeinfo referencing revision(s) prior to the oldest dumped revision (r2767). Loading this dump may result in invalid mergeinfo.
* Dumped revision .
WARNING 0x0001: The range of revisions dumped contained mergeinfo which reference revisions outside that range.
备份 conf 库,备份文件名:conf.dmp
* Dumped revision .
[info]-- ::09退出码为:
[info]-- ::09删除4天前的备份: 删除文件夹:"20131129_16441602"
删除文件夹:"20131130_23000008"

Windows的Subversion备份脚本的更多相关文章

  1. Windows下SVN备份脚本

    本站备份:svn备份与还原_脚本_(dump命令) 以下是转载记录, 转自:https://wuxiaobai.win/archives/111 用法 svnadmin dump REPOS_PATH ...

  2. Windows 下 MySQL 备份脚本

    @title MySQL备份脚本 @echo off @echo root@127.0.0.1:3306 set host=127.0.0.1 set port=3306 set user=root ...

  3. Windows环境下Oracle数据库的自动备份脚本

    批处理文件(.bat) @echo off echo ================================================ echo  Windows环境下Oracle数据 ...

  4. Windows下MySQL数据库备份脚本(一)

    说明: MySQL数据库安装目录:C:\Program Files\MySQL\MySQL Server 5.0 MySQL数据库存放目录:C:\Program Files\MySQL\MySQL S ...

  5. Windows下MySQL数据库备份脚本(二)

    说明: MySQL数据库安装目录:C:\Program Files\MySQL\MySQL Server 5.0 MySQL数据库存放目录:C:\Program Files\MySQL\MySQL S ...

  6. Windows:Oracle 11g 备份脚本

    @echo off echo ================================================ echo Windows环境下Oracle数据库的自动备份脚本 echo ...

  7. Windows环境下Oracle数据库的自动备份脚本自动删除30天前的备份

    @echo off echo ================================================ echo Windows环境下Oracle数据库的自动备份脚本 echo ...

  8. 研究windows下SVN备份及还原恢复方案

    windows下SVN备份方案 备份策略 svn备份一般采用三种方式: 1)svnadmin dump  2)svnadmin hotcopy  3)svnsync.  注意,svn备份不宜采用普通的 ...

  9. 在windows上自动备份SVN版本库及定时删除

    下面的脚本是在windows SVN的备份策略,采用的是hotcopy的方法 方案一: 1.先创建一个fullBackup的脚本:fullBackup.bat echo off rem Subvers ...

随机推荐

  1. ppt

    放映时  F5是从头开始放映, shift+F5是从当前页开始放映 在菜单->幻灯片放映->勾选  “使用演讲者视图”      就可以在播放时看到自己的备注

  2. PHP递归创建多级目录(一道面试题的解题过程)

    今天看到一道面试题,要写出一个可以创建多级目录的函数: 我的第一个感觉就是用递归创建,具体思路如下: function Directory($dir){ if(is_dir($dir) || @mkd ...

  3. hdu 2089 不要62--数位dp入门

    不要62 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Problem Des ...

  4. Linux环境安装MQ

    MQ下载地址:http://www-03.ibm.com/software/products/us/en/wmq/ 安装的MQ软件包为WMQv600Trial-x86_linux_2.tar.gz.  ...

  5. windows7+eclipse+hadoop2.5.2环境配置

    windows7+eclipse+hadoop2.5.2环境配置    一.hadoop集群环境配置 参考我的前一篇文章(ubuntu + hadoop2.5.2分布式环境配置 http://www. ...

  6. STL的erase()陷阱-迭代器失效总结

    下面材料整理自Internet&著作. STL中的容器按存储方式分为两类,一类是按以数组形式存储的容器(如:vector .deque):另一类是以不连续的节点形式存储的容器(如:list.s ...

  7. linux alarm函数解除read write等函数的阻塞

    看到apue的第十章,说到alarm,pause可以实现sleep,可以让某些一直阻塞的函数超时,例如read,write.代码如下: static void sig_alrm(int signo) ...

  8. css3属性column知多少

    CSS3 可以将文本内容设计成像报纸一样的多列布局.像下面这样: 这样的布局称为"多列布局". 对多列属性分别进行学习: 对于 column 的所有属性,ie10+ 支持,fire ...

  9. jQuery对象与dom对象的区别与相互转换

    什么是jQuery对象? 就是通过jQuery包装DOM对象后产生的对象.jQuery对象是jQuery独有的,其可以使用jQuery里的方法.例如: $("#test").htm ...

  10. AC日记——导弹拦截 洛谷 P1020 (dp+模拟)

    题目描述 某国为了防御敌国的导弹袭击,发展出一种导弹拦截系统.但是这种导弹拦截系统有一个缺陷:虽然它的第一发炮弹能够到达任意的高度,但是以后每一发炮弹都不能高于前一发的高度.某天,雷达捕捉到敌国的导弹 ...