SVN備份批處理文件

SVN備份批處理文件,親測可用html

另外,備份文件時獲取文件名%%~ni 可改成%%~nxi,以免文件名中有「.」號時,讀取不完成,將.後面的看成後綴名svn

須要使用hotcopy 時,能夠將關鍵代碼進行相關的修改調試

 

----------------日誌

@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:~,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%
:: 創建日誌
@echo [info]%date:~,10% %time:~,2%:%time:~3,2%:%time:~6,2%創建備份目錄:%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 2>>%LOG%
)
:: 輸出備份命令退出碼,用來判斷是否備份成功。成功的退出碼爲0.
@echo [info]%date:~,10% %time:~,2%:%time:~3,2%:%time:~6,2%退出碼爲:%errorlevel%>>%LOG%
:: 自動設置計劃任務:每週六 晚上11點執行本腳本。修改請參考:http://www.doc88.com/p-052298888776.html
at 23:00 /next:S %~f0>>%LOG%
:: 刪除過時備份
goto delete

:delete
:: 輸出要刪除的目錄到日誌文件
@echo [info]%date:~,10% %time:~,2%:%time:~3,2%:%time:~6,2%刪除%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:~,10% %time:~,2%:%time:~3,2%:%time:~6,2%程序目錄不存在,請檢查:%SVN_HOME%>>%LOG%
goto end

:end
:: 輸出一行空行分割日誌
@echo. >>%LOG%
exit
:: 調試腳本用的命令
:: at 16:06 %~f0
:: PAUSE
:: exithtm

相關文章
相關標籤/搜索