美文网首页
vba学习:文件的压缩与解压缩

vba学习:文件的压缩与解压缩

作者: kiddragon | 来源:发表于2018-04-26 10:42 被阅读0次

    引言

    工作中常常用到压缩文件或将文件压缩的问题,为了提高工作效率,这次来分享一下vba中的文件压缩和解压缩的代码,需要用到的软件winrar的命令行命令。

    重点

    • shell函数

      它是vba自带的函数,是应用程序和系统之间的桥梁。用法就是执行一个可执行文件。与开始菜单的运行功能一样。

      语法:Shell(pathname[,windowstyle])

      • pathname 是要执行的程序名,可能还包括目录或文件夹
      • Windowstyle 表示在程序运行时窗口的样式

      e.g.

      '给出路径直接执行Winamp.exe程序。
      Shell("C:\Program Files\Winamp\Winamp.exe", 1)  
      

    • winrar命令行

      语法: rar <命令> -<开关 1> -<开关 N> <压缩文件> <文件...>
      <@列表文件...> <解压路径/>

      参数说明:

      <命令>
        a             添加文件到压缩文件
        c             添加压缩文件注释
        cf            添加文件注释
        cw            写入压缩文件注释到文件
        d             删除压缩文件中的文件
        e             解压压缩文件到当前目录
        f             刷新压缩文件中的文件
        i[参数]=<串>  在压缩文件中查找字符串
        k             锁定压缩文件
        l[t,b]        列出压缩文件[技术信息,简洁]
        m[f]          移动到压缩文件[仅对文件]
        p             打印文件到标准输出设备
        r             修复压缩文件
        rc            重建丢失的卷
        rn            重命名压缩文件
        rr[N]         添加数据恢复记录
        rv[N]         创建恢复卷
        s[名字|-]     转换压缩文件为自解压格式或转换回压缩文件
        t             测试压缩文件
        u             更新压缩文件中的文件
        v[t,b]        详细列出压缩文件[技术信息,简洁]
        x             用绝对路径解压文件
      
      <开关>
        -             停止扫描
        ac            压缩或解压后清除存档属性
        ad            添加压缩文件名到目标路径
        ag[格式]      使用当前日期生成压缩文件名
        ao            添加具有压缩属性的文件
        ap<格式>      添加路径到压缩文件中
        as            同步压缩文件内容
        av            添加用户身份校验(仅注册版本可用)
        av-           禁用用户身份校验
        c-            禁用注释显示
        cfg-          禁用读取配置
        cl            名称转换为小写
        cu            名称转换为大写
        df            压缩后删除文件
        dh            打开共享文件
        ds            对固实压缩文件禁用名称排序
        e[+]<属性>    设置文件排除和包括属性
        ed            不添加空目录
        en            不添加"压缩文件结束"标志
        ep            从名称中排除路径
        ep1           从名称中排除基本目录
        ep2           展开为完整路径
        ep3           扩展路径为包含盘符的完全路径
        f             刷新文件
        hp[密码]      同时加密文件数据和文件头
        id[c,d,p,q]   禁用消息
        ieml[属性]    用 E-mail 发送压缩文件
        ierr          发送所有消息到标准错误设备
        ilog[名称]    把错误写到日志文件(只有注册版本可用)
        inul          禁用所有消息
        ioff          完成一个操作后关闭 PC 电源
        isnd          启用声音
        k             锁定压缩文件
        kb            保留损坏的已解压文件
        m<0..5>       设置压缩级别(0-存储...3-默认...5-最大)
        mc<参数>      设置高级压缩参数
        md<大小>      以KB为单位的字典大小(64,128,256,512,1024,2048,4096 or A-G)
        ms[ext;ext]   指定存储的文件类型
        n<文件>       仅包含指定的文件
        n@            从标准输入设备读取文件名到包括
        n@<列表>      在指定的文件列表包括文件
        o+            覆盖已存在文件
        o-            不覆盖已存在文件
        oc            设置 NTFS 压缩属性
        os            保存 NTFS 流
        ow            保存或恢复文件所有者和组
        p[密码]       设置密码
        p-            不询问密码
        r             递归子目录
        r0            仅递归通配符名称的子目录
        ri<P>[:<S>]   设置优先级(0-默认,1-最小..15-最大)和以毫秒为单位的休眠时间
        rr[N]         添加数据恢复记录
        rv[N]         创建恢复卷
        s[<N>,v[-],e] 创建固实压缩文件
        s-            禁用固实压缩文件
        sfx[名称]     创建自解压压缩文件
        st[名称]      从标准输入设备读取数据(stdin)
        t             压缩后测试文件
        ta<日期>      添加日期 <日期> 后修改的文件,日期格式 YYYYMMDDHHMMSS
        tb<日期>      添加日期 <日期> 前修改的文件,日期格式 YYYYMMDDHHMMSS
        tk            保留原始压缩文件时间
        tl            设置压缩文件时间为最新文件时间
        tn<时间>      添加 <时间> 以后的文件
        to<时间>      添加 <时间> 以前的文件
        ts<m,c,a>[N]  保存或恢复文件时间(修改,创建,访问)
        u             更新文件
        v             自动检测创建卷的大小或者列出所有的卷
        v<大小>[k,b]  创建卷大小=<大小>*1000 [*1024, *1]
        vd            创建容量前清除磁盘内容
        ver[n]        文件版本控制
        vn            使用旧风格的卷命名方案
        vp            每卷之前暂停
        w<路径>       指定工作目录
        x<文件>       排除指定的文件
        x@            从标准输入设备读取要排除的文件名
        x@<列表>      排除指定列表文件中的文件
        y             假设对全部询问都回答是
        z<文件>       从文件读取压缩文件注释
      

      e.g.

      ::解压缩f:\test.rar到文件夹f:\test\
      C:\program files\winrar\winrar.exe X f:\test.rar f:\test\
      ::将f:\test\文件夹内容压缩成f:\test.rar
      C:\program files\winrar\winrar.exe A f:\test\ f:\test.rar 
      

    代码

    1. 批量解压缩

      将D:\test下的所有rar文件解压到D:\test。

      Sub UnRarFile()   '解压缩程序
          Dim rarexe As String
          Dim rarfile As String
          Dim rarpath As String
          Dim rarcmd As String
          Dim result As Long
          'rar程序路径
          rarexe = "C:\program files\winrar\winrar.exe" 
          '需要解压缩的rar文件,用通配符可以解压所有文件
          rarfile = "D:\test\*.rar"  
          ' 解压后的文件存放路径
          rarpath = "D:\test\"     
          'rar程序的X命令,用来解压缩文件的字符串
          rarcmd = rarexe & " X " & rarfile & " " & rarpath 
          result = Shell(rarcmd, vbHide) '执行解压缩
      End Sub
      
    2. 批量压缩文件

      将D:\test下的所有文件压缩到D:\test.rar。

      Sub RarFile()   '压缩程序
          Dim rarexe As String
          Dim rarfile As String
          Dim rarpath As String
          Dim rarcmd As String
          Dim result As Long
          'rar程序路径
          rarexe = "C:\program files\winrar\winrar.exe"
          '压缩后的文件名
          rarfile = "D:\test\test.rar"
          ' 指定要压缩的文件
          rarpath = "D:\test\*.*"
          'rar程序的A命令压缩文件的字符串
          rarcmd = rarexe & " A " & rarfile & " " & rarpath 
          result = Shell(rarcmd, vbHide) '执行压缩
      End Sub
      

    参考资料

    http://club.excelhome.net/thread-1034804-1-1.html

    http://club.excelhome.net/thread-219468-1-1.html

    https://www.cnblogs.com/fetty/p/4769279.html

    相关文章

      网友评论

          本文标题:vba学习:文件的压缩与解压缩

          本文链接:https://www.haomeiwen.com/subject/ppdplftx.html