SVN自动备份批处理

     截止到目前为止,手上的项目都纳入SVN进行管理,随着而来的问题是:如何为SVN版本库实现自动备份。我手上用的是VisualSVN工具来代替SVN服务端,但VisualSVN没有提供备份工具,没办法只好自己写一个,再写这个脚本的时候,我参考了SCMLife论坛上某位朋友的脚本文件,并稍做修改,现在贡献出来!

一、前提条件:

  1. 你的机器上装有VisualSVN,如果没有,也没有关系,只要确保Subversion的安装目录下可以找到svnadmin这个命令即可。因为版本库的备份就是利用这个程序来实现;
  2. 你的机器上要有7zip的命令行程序7z.exe,如果没有,请去7zip官方网站下载,因为我们要用到这个程序来实现对备份后的版本库进行压缩保存;
  3. 知道你的版本库所在目录;
  4. 备份脚本分为两个批处理文件,它们分别是:backup.bat与simpleBackup.bat。需要记住得是:simpleBackup.bat文件要放在版本库所在的目录下;而backup.bat可以任意放置。我们调用的是backup.bat;
  5. 每次备份成功后,会在版本库所在目录下的backup.log文件中记录;

backup.bat 源码

echo off

rem Subversion的安装目录 
set SVN_HOME="C:\Program Files\VisualSVN Server"

rem 所有版本库的父目录 
set SVN_ROOT=E:\Repositories

rem 备份的目录 
set BACKUP_SVN_ROOT=E:\bak

rem 创建存放版本库的临时目录 
set BACKUP_DIRECTORY=%BACKUP_SVN_ROOT%\%date:~0,4%%date:~5,2%%date:~8,2% 
if exist %BACKUP_DIRECTORY% goto checkBack 
echo %date:~0,4%%date:~5,2%%date:~8,2% : 建立备份目录%BACKUP_DIRECTORY%>>%SVN_ROOT%/backup.log

rem 创建备份目录 
md %BACKUP_DIRECTORY%

rem 验证目录是否为版本库,如果是则取出名称备份 
for /r %SVN_ROOT% %%I in (.) do @if exist "%%I\conf\svnserve.conf" call %SVN_ROOT%\simpleBackup.bat "%%~fI" %%~nI 
echo 开始压缩版本库,请不要中止.... 
%SVN_ROOT%\7z.exe a -tzip %BACKUP_SVN_ROOT%\%date:~0,4%%date:~5,2%%date:~8,2%.zip %BACKUP_DIRECTORY%\* -r >nul 
echo 版本库压缩完成! 
rem 清除临时创建备份目录 
rd/s/q %BACKUP_DIRECTORY% 
goto end

:checkBack 
echo 备份目录%BACKUP_DIRECTORY%已经存在,请清空。 
goto end

:end

SimpleBackup.bat 源码@echo 正在备份版本库%1...... 
@%SVN_HOME%\bin\svnadmin hotcopy %1 %BACKUP_DIRECTORY%\%2 
@echo 版本库%1成功备份到了%2!

PS:在编写批处理文件时,我试图创建一个变量,该变量用于保存当前日期,但是不知为何总是不能成功,相关代码如下:

echo off

set filename = %date:~0,4%%date:~5,2%%date:~8,2%

echo 文件名:%filename%

按道理来说,这三句话,没有错误啊,为什么却无法输出变量filename的值,郁闷!

 

请知道朋友帮忙看一看!

posted @ 2009-09-20 18:12  守护心中彩虹  阅读(1582)  评论(1编辑  收藏  举报