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

引言

工作中常常用到压缩文件或将文件压缩的问题,为了提高工作效率,这次来分享一下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

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,293评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,604评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,958评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,729评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,719评论 5 366
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,630评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,000评论 3 397
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,665评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,909评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,646评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,726评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,400评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,986评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,959评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,197评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,996评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,481评论 2 342

推荐阅读更多精彩内容