使用svnadmin hotcopy配合windows计划任务可实现每日自动全量备份,关键在于路径配置(将subversion bin目录加入path)、脚本编写(含时间戳命名、自动建目录、svnlook youngest校验)、计划任务设置(每日23:55执行、最高权限)及日志验证(记录时间与版本号)。

直接用 svnadmin hotcopy 配合 Windows 计划任务,就能实现每日自动全量备份。关键不是命令多复杂,而是路径、环境、清理和验证这四点要到位。
确保 svnadmin 可被系统识别
Windows 下执行 svnadmin 前,必须让系统知道它在哪。最稳妥的做法是:把 Subversion 的 bin 目录(比如 C:\Program Files\VisualSVNServer\bin 或 D:\svn\bin)加进系统环境变量 PATH。这样批处理里就不用写完整路径,避免因路径出错导致备份静默失败。
验证方法:打开任意命令提示符,输入 svnadmin --version,能正常返回版本号即表示配置成功。
编写可复用的备份批处理脚本
推荐使用带时间戳命名、自动创建目录、含基础校验的脚本。例如保存为 D:\Scripts\svn_backup.bat:
- 用
%date:~0,4%%date:~5,2%%date:~8,2%获取年月日(如 20260612),避免中文系统下日期格式不一致问题 - 备份目标路径设为
D:\SVN_Backup\%DATE%\,每天一个独立文件夹,互不干扰 - 核心命令:
svnadmin hotcopy "D:\Repositories\MyProject" "D:\SVN_Backup\%DATE%\MyProject" - 加一句
svnlook youngest "D:\SVN_Backup\%DATE%\MyProject",执行成功才说明副本完整;失败则退出码非 0,可用于后续判断 - 最后用
del /q /s "D:\SVN_Backup\%date:~0,4%%date:~5,2%%date:~8,2%"之前旧备份(或配合forfiles删除 7 天前文件)
通过计划任务定时触发
不要依赖 AT 命令(已弃用),改用“任务计划程序”图形界面或 schtasks 命令:
- 打开“任务计划程序”,新建基本任务 → 设名称、描述
- 触发器选“每天”,时间设为 23:55(避开业务高峰,留出缓冲)
- 操作选“启动程序”,程序填
cmd.exe,参数填/c D:\Scripts\svn_backup.bat - “常规”选项卡勾选“不管用户是否登录都要运行”和“使用最高权限”,否则服务账户无权访问 SVN 目录
备份后简单验证与日志记录
自动备份不能只看“没报错”,得有反馈依据:
- 在批处理末尾加
echo %date% %time% >> D:\Scripts\backup.log记录执行时间 - 把
svnlook youngest的输出重定向到日志:svnlook youngest "D:\SVN_Backup\%DATE%\MyProject" >> D:\Scripts\backup.log 2>&1 - 检查日志末尾是否含数字(版本号),就是最轻量但有效的完整性验证
- 若需多仓库,可用
for /d遍历D:\Repositories下所有子目录,逐个 hotcopy











