Svn备份与Bandizip压缩批处理程序

目的:为了定时备份多个svn仓库数据,使用批处理程序进行备份并Bandizip进行压缩保存到指定位置,操作完成后弹出成功提示。

为了完成以上目标,需要了解以下几个方面:

  1. 批处理命令
  2. Svn命令
  3. Bandizip命令

1. 批处理命令

echo 命令

打开回显或关闭请求回显功能,或显示消息。如果没有任何参数,echo命令将显示当前回显设置。

语法
echo [{on|off}] [message]

示例:
@echo off / echo hello world

rem 命令

注释命令,类似于在C语言中的/--------/,它并不会被执行,只是起一个注释的作用,只有在编辑批处理时才会被看到,主要用于方便修改。
:: 也具有rem的功能,但::和rem还是有区别的。当关闭回显时,rem和::后的内容都不会显示;当打开回显时,rem后的内容会显示出来,然而::后的内容仍然不会显示。

语法
Rem [注释内容]

示例:
Rem 你好。

pause 命令

暂停命令。运行 Pause 命令时,将显示下面的消息:
Press any key to continue. . .(或:请按任意键继续. . .)

示例:
@echo off
:begin
copy G:*.* d:\back
echo 请插入另一张光盘...
pause
goto begin

start 命令

调用外部程序,所有的DOS命令和命令行程序都可以由start命令来调用。如:startcalc.exe即可打开Windows的计算器。

常用参数:
MIN 开始时窗口最小化
SEPARATE 在分开的空间内开始 16 位 Windows 程序
HIGH 在 HIGH 优先级类别开始应用程序
REALTIME 在 REALTIME 优先级类别开始应用程序
WAIT 启动应用程序并等候它结束
parameters 这些为传送到命令/程序的参数
执行的应用程序是 32-位 GUI 应用程序时,CMD.EXE 不等应用程序终止就返回命令提示。如果在命令脚本内执行,该新行为则不会发生。

set 命令

显示、设置或删除变量。

  1. 显示变量:set 或 set s 前者显示批处理当前已定义的所有变量及其值,后者显示所有以s开头的变量及值。
  2. 设置和调用变量:例如set aa=abcd,就是把aa定义为abcd。如果要调用这个变量,就把aa两边加上个百分号。
  3. 删除变量:set aa= 此句命令即可删除变量aa。若变量aa已被定义,则删除变量aa;若aa尚未定义,则此句命令无实质意义。

例如:
set aa=abcd
echo %aa%
pause
运行这段命令就会显示"abcd"


需要说明的是,批处理中的变量是不区分类型的,不需要像C语言中的变量那样还要区分int、float、char等。比如执行set aa=345后,变量aa的值既可以被视为数字345,也可以被视为字符串345。
set命令具有扩展功能,如用作交互输入、字符串处理、数值计算等,属于高级命令范畴。

for语句(循环结构)

for语句可以实现类似于C语言里面的循环结构,当然for语句的功能要更强大一点,通过不同的开关可以实现更多的功能。for语句有多个开关,不同开关将会实现不同的功能。

  1. 无开关
    无开关的for语句能够对设定的范围内进行循环,是最基本的for循环语句。其命令格式为:
    FOR %%variable IN (set) DO command
    其中,%%variable是批处理程序里面的书写格式,在DOS中书写为%variable,即只有一个百分号(%);set就是需要我们设定的循环范围,类似于C语言里面的循环变量;do后面的command就是循环所执行的命令,即循环体。
    无开关for语句举例:
    @echo off
    for %%i in (a,"b c",d) do echo %%i
    pause>nul

  2. 开关/L
    含开关/L的for语句,可以根据set里面的设置进行循环,从而实现对循环次数的直接控制。其命令格式为:
    FOR /L %%variable IN (start,step,end) DO command
    其中,start为开始计数的初始值,step为每次递增的值,end为结束值。当end小于start时,step需要设置为负数。
    含开关/L的for语句举例(创建5个文件夹):
    @echo off
    for /l %%i in (1,2,10) do md %%i
    pause

2. Svn命令

svnadmin dump

   将文件系统的内容转储到标准输出。

概要
svnadmin dump REPOS_PATH [-r LOWER[:UPPER]] [--incremental]

描述
使用“dumpfile”可移植格式将文件系统的内容转储到标准输出,将反馈发送到标准错误,导出的修订版本从LOWER到UPPER。如果没有提供修订版本,会导出所有的修订版本树,如果只提供LOWER,导出一个修订版本树。
如果Subversion的转储文件很大,你可以使用--deltas来减小svnadmin创建的导出文件的大小。通过这个选项,就不会写出每次修订版本的内容,svnadmin dump只会写出版本之间的区别。然而,创建增量导出文件的坏处―对CPU的要求更高,svndumpfilter不可以对这个文件操作,而且非增量的转储文件可以更好的压缩。

选项
--revision (-r)
--incremental
--quiet
--deltas

例子

  1. 转储整个版本库:
 
svnadmin dump /usr/local/svn/repos
 
SVN-fs-dump-format-version: 1
 
Revision-number: 0
 
* Dumped revision 0.
 
Prop-content-length: 56
 
Content-length: 56
 
  1. 从版本库增量转储一个单独的事务:
 
svnadmin dump /usr/local/svn/repos -r 21 --incremental
 
* Dumped revision 21.
 
SVN-fs-dump-format-version: 1
 
Revision-number: 21
 
Prop-content-length: 101
 
Content-length: 101
 

3. Bandizip命令

# Bandizip.exe <archive>
# Bandizip.exe <command> [<switches>...] <archive> [<files>...] [<path_to_extract>]
# Bandizip.exe <bcommand> [<switches>...] [<files>...]

<archive> 压缩包

执行在设置中指定的操作。 通常只打开压缩包。

<Commands> 命令

a : 添加文件到压缩包
x : 用完整路径解压文件
t : 测试压缩包完整性
d : 删除压缩包中文件
c : 创建新档案(或覆盖现有文件)
cd: 显示“新建压缩包”对话框

<BCommands> 批处理命令

bc:要压缩的每个文件/文件夹名称。 若存在相同的压缩包名,则以“文件名(2)”格式创建压缩包。若未指定目标文件夹,则默认目标文件夹为原始文件或文件夹所在的路径。
bx: 将每个压缩包分别解压到目标文件夹中。 若未指定目标文件夹,则默认目标文件夹为每个压缩文件所在的路径。
bt: 测试压缩包

<Switches> 开关

- 停止开关扫描
-l:<0...9> 设置压缩级别(0:存储,5:默认,9:最大)
-r- 禁用递归(默认)
-r 启用递归子目录
-aoa 无需提示覆盖全部现有文件
-aos 跳过已有文件的解压
-aou 自动重命名解压的文件
(例如,name.txt将被重命名为name (2).txt)
-sfx:[{name}] 创建SFX压缩包
-zopfli 使用Zopfli作为默认压缩算法
-p:{password} 设置密码
-o:{dir} 指定目标文件夹
-y 全选“是”
-fmt:{fmt} 指定压缩格式
(zip, zipx, exe, tar, tgz, lzh, iso, 7z, gz, xz)
-v:{size} 指定分卷大小 (-v:1000000 -v:1440k -v:100MB ...)

<Switches> (仅针对Banzip)

-email 压缩并邮件发送
-target:dlg 显示“目标路径选择”对话框
-target:auto 智能解压到目标路径
-target:name 按压缩包名称解压到目标路径中文件夹下

示例

1. 打开压缩包

Bandizip.exe sample.zip

2. 新建压缩包(覆盖已有文件)

Bandizip.exe c c:\sample.zip c:\src\

Bandizip.exe c c:\sample.zip c:\src1\ c:\src2\

3. 添加文件到压缩包

Bandizip.exe a c:\sample.zip c:\src\sample.txt

Bandizip.exe a c:\sample.zip c:\src\sample1.txt c:\src\sample2.txt

Bandizip.exe a c:\sample.zip c:\src*.txt c:\src*.jpg

4. 删除压缩包中文件

Bandizip.exe d c:\sample.zip sample.txt

Bandizip.exe d c:\sample.zip *.txt

5. 将压缩包解压到目标路径

Bandizip.exe x -o:c:\dest\ c:\sample.zip

6. 添加文件到压缩包,并设置密码为Passw0rd,无提示覆盖全部已有文件并关闭对话框

Bandizip.exe a -y -p:Passw0rd test.zip c:\src d:\src

4. 完整代码

 1 @echo off
 2 ::指定到Svn仓库目录
 3 E:
 4 set work_path=D:\SvnRepertory
 5 set back_path=D:\SvnBack
 6 set zip_path=D:\SvnBackPackage
 7 cd %work_path%
 8 
 9 ::使用for循环读取仓库目录下的所有仓库文件夹名称,并进行循环备份
10 for /d %%s in (*.*) do (
11 echo %work_path%\%%s
12 svnadmin dump %work_path%\%%s > %back_path%\%%s.bak
13 )
14 
15 ::根据当前时间创建压缩包名称
16 set "year=%date:~0,4%"
17 set "month=%date:~5,2%"
18 set "day=%date:~8,2%"
19 set "hour_ten=%time:~0,1%"
20 set "hour_one=%time:~1,1%"
21 set "minute=%time:~3,2%"
22 set "second=%time:~6,2%"
23 if "%hour_ten%" == " " (
24 set zipfile=%year%%month%%day%0%hour_one%%minute%%second%.zip
25 ) else (
26 set zipfile=%year%%month%%day%%hour_ten%%hour_one%%minute%%second%.zip
27 )
28 
29 ::使用Bandizip命令进行压缩,在成功后弹窗提示操作完成,并打开备份目录
30 Bandizip.exe c %zip_path%\%zipfile% %back_path%
31 mshta vbscript:msgbox("备份并压缩成功,快去看看吧!",64,"提示")(window.close)
32 start %zip_path%
33 pause
34 exit
View Code

注意:如果弹出提示为乱码,则需要将文件另存为ANSI格式

    1. 批处理命令简介--百度百科
    2. svnadmin dump命令
    3. Bandizip命令行参数
posted @ 2019-06-21 16:03  Idus  阅读(955)  评论(0编辑  收藏  举报