插件窝 干货文章 懒人脚本:Windows下SVN备份脚本

懒人脚本:Windows下SVN备份脚本

备份 BACKUP FILE SVN 775    来源:    2025-05-10

Windows下SVN备份脚本

以下是一个简单实用的Windows环境下SVN仓库备份脚本,使用批处理(.bat)实现,适合懒人使用。

完整脚本

@echo off
:: SVN备份脚本
:: 作者:IT工程师
:: 日期:%date%
:: 版本:1.2

:: 设置变量
set SVN_ADMIN="C:\Program Files\TortoiseSVN\bin\svnadmin.exe"
set BACKUP_DIR=D:\SVN_Backups
set REPOS_DIR=E:\SVN_Repositories
set LOG_FILE=%BACKUP_DIR%\backup_log.txt
set DAYS_TO_KEEP=30

:: 创建备份目录
if not exist "%BACKUP_DIR%" mkdir "%BACKUP_DIR%"

:: 记录开始时间
echo ========= 备份开始 [%date% %time%] ========= >> "%LOG_FILE%"

:: 获取所有仓库列表
for /d %%i in ("%REPOS_DIR%\*") do (
    set REPO_NAME=%%~ni
    set BACKUP_FILE=%BACKUP_DIR%\%REPO_NAME%_%date:/=-%_%time::=-%.dump

    echo 正在备份仓库: %REPO_NAME% >> "%LOG_FILE%"

    :: 执行备份
    %SVN_ADMIN% dump "%%i" > "%BACKUP_FILE%"

    if %errorlevel% equ 0 (
        echo 备份成功: %BACKUP_FILE% >> "%LOG_FILE%"

        :: 压缩备份文件
        echo 正在压缩备份文件... >> "%LOG_FILE%"
        "%ProgramFiles%\7-Zip\7z.exe" a -tzip "%BACKUP_FILE%.zip" "%BACKUP_FILE%"

        if %errorlevel% equ 0 (
            echo 压缩成功: %BACKUP_FILE%.zip >> "%LOG_FILE%"
            del "%BACKUP_FILE%"
        ) else (
            echo 压缩失败: %BACKUP_FILE% >> "%LOG_FILE%"
        )
    ) else (
        echo 备份失败: %REPO_NAME% >> "%LOG_FILE%"
    )
)

:: 清理旧备份
echo 正在清理超过%DAYS_TO_KEEP%天的旧备份... >> "%LOG_FILE%"
forfiles /p "%BACKUP_DIR%" /m *.zip /d -%DAYS_TO_KEEP% /c "cmd /c echo 删除旧备份: @path >> "%LOG_FILE%" & del @path"

:: 记录结束时间
echo ========= 备份结束 [%date% %time%] ========= >> "%LOG_FILE%"
echo. >> "%LOG_FILE%"

echo SVN备份完成!结果已记录到 %LOG_FILE%
pause

使用说明

  1. 配置变量

    • SVN_ADMIN:svnadmin.exe的路径(根据你的TortoiseSVN安装位置调整)
    • BACKUP_DIR:备份文件存放目录
    • REPOS_DIR:SVN仓库所在目录
    • DAYS_TO_KEEP:保留备份的天数
  2. 依赖工具

    • TortoiseSVN(包含svnadmin工具)
    • 7-Zip(用于压缩备份文件,可选)
  3. 执行方式

    • 将脚本保存为svn_backup.bat
    • 双击运行或通过计划任务定期执行
  4. 备份内容

    • 每个仓库生成一个.dump文件
    • 自动压缩为.zip格式
    • 保留30天内的备份(可配置)
    • 记录详细日志

高级选项

  1. 增量备份(替换完整备份部分):
:: 获取上次备份版本号
set LAST_REV=0
if exist "%BACKUP_DIR%\%REPO_NAME%_last_rev.txt" (
    for /f "usebackq" %%j in ("%BACKUP_DIR%\%REPO_NAME%_last_rev.txt") do set LAST_REV=%%j
)

:: 执行增量备份
%SVN_ADMIN% dump "%%i" --incremental -r %LAST_REV%:HEAD > "%BACKUP_FILE%"

:: 记录最新版本号
svnlook youngest "%%i" > "%BACKUP_DIR%\%REPO_NAME%_last_rev.txt"
  1. 网络备份
:: 添加网络位置映射(根据需要取消注释)
:: net use Z: \\backup_server\svn_backups password /user:username
:: set BACKUP_DIR=Z:\SVN_Backups
  1. 邮件通知
:: 使用blat发送邮件(需要先安装blat)
if exist "%LOG_FILE%" (
    blat "%LOG_FILE%" -to admin@example.com -subject "SVN备份报告" -server smtp.example.com -f svn_backup@example.com
)

计划任务设置

  1. 打开"任务计划程序"
  2. 创建基本任务
  3. 设置触发器(如每天凌晨2点)
  4. 操作为"启动程序",选择本脚本
  5. 在"条件"选项卡中,取消"只有在计算机使用交流电源时才启动此任务"

这个脚本提供了完整的SVN仓库备份解决方案,包括压缩和自动清理功能,适合大多数Windows环境下的SVN备份需求。