• 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:ack
    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:srcsample.txt

    Bandizip.exe a c:sample.zip c:srcsample1.txt c:srcsample2.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命令行参数
  • 相关阅读:
    如何将JS中object转换为字符串
    验证码的实现
    JSP中解决session超时跳转到登陆页面并跳出iframe框架或局部区域的方法
    java 后台封装json数据学习总结
    ztree复选框
    左偏树详解
    Docker 入门
    linux 多进程
    派生类构造函数顺序
    20210203 7. 分库分表实战及中间件
  • 原文地址:https://www.cnblogs.com/Idus/p/11065160.html
Copyright © 2020-2023  润新知