vba學(xué)習(xí):文件的壓縮與解壓縮

引言

工作中常常用到壓縮文件或?qū)⑽募嚎s的問題,為了提高工作效率,這次來分享一下vba中的文件壓縮和解壓縮的代碼,需要用到的軟件winrar的命令行命令。

重點(diǎn)

  • shell函數(shù)

    它是vba自帶的函數(shù),是應(yīng)用程序和系統(tǒng)之間的橋梁。用法就是執(zhí)行一個(gè)可執(zhí)行文件。與開始菜單的運(yùn)行功能一樣。

    語法:Shell(pathname[,windowstyle])

    • pathname 是要執(zhí)行的程序名,可能還包括目錄或文件夾
    • Windowstyle 表示在程序運(yùn)行時(shí)窗口的樣式

    e.g.

    '給出路徑直接執(zhí)行Winamp.exe程序。
    Shell("C:\Program Files\Winamp\Winamp.exe", 1)  
    

    ?

    ?

  • winrar命令行

    語法: rar <命令> -<開關(guān) 1> -<開關(guān) N> <壓縮文件> <文件...>
    <@列表文件...> <解壓路徑/>

    參數(shù)說明:

    <命令>
      a             添加文件到壓縮文件
      c             添加壓縮文件注釋
      cf            添加文件注釋
      cw            寫入壓縮文件注釋到文件
      d             刪除壓縮文件中的文件
      e             解壓壓縮文件到當(dāng)前目錄
      f             刷新壓縮文件中的文件
      i[參數(shù)]=<串>  在壓縮文件中查找字符串
      k             鎖定壓縮文件
      l[t,b]        列出壓縮文件[技術(shù)信息,簡潔]
      m[f]          移動到壓縮文件[僅對文件]
      p             打印文件到標(biāo)準(zhǔn)輸出設(shè)備
      r             修復(fù)壓縮文件
      rc            重建丟失的卷
      rn            重命名壓縮文件
      rr[N]         添加數(shù)據(jù)恢復(fù)記錄
      rv[N]         創(chuàng)建恢復(fù)卷
      s[名字|-]     轉(zhuǎn)換壓縮文件為自解壓格式或轉(zhuǎn)換回壓縮文件
      t             測試壓縮文件
      u             更新壓縮文件中的文件
      v[t,b]        詳細(xì)列出壓縮文件[技術(shù)信息,簡潔]
      x             用絕對路徑解壓文件
    
    <開關(guān)>
      -             停止掃描
      ac            壓縮或解壓后清除存檔屬性
      ad            添加壓縮文件名到目標(biāo)路徑
      ag[格式]      使用當(dāng)前日期生成壓縮文件名
      ao            添加具有壓縮屬性的文件
      ap<格式>      添加路徑到壓縮文件中
      as            同步壓縮文件內(nèi)容
      av            添加用戶身份校驗(yàn)(僅注冊版本可用)
      av-           禁用用戶身份校驗(yàn)
      c-            禁用注釋顯示
      cfg-          禁用讀取配置
      cl            名稱轉(zhuǎn)換為小寫
      cu            名稱轉(zhuǎn)換為大寫
      df            壓縮后刪除文件
      dh            打開共享文件
      ds            對固實(shí)壓縮文件禁用名稱排序
      e[+]<屬性>    設(shè)置文件排除和包括屬性
      ed            不添加空目錄
      en            不添加"壓縮文件結(jié)束"標(biāo)志
      ep            從名稱中排除路徑
      ep1           從名稱中排除基本目錄
      ep2           展開為完整路徑
      ep3           擴(kuò)展路徑為包含盤符的完全路徑
      f             刷新文件
      hp[密碼]      同時(shí)加密文件數(shù)據(jù)和文件頭
      id[c,d,p,q]   禁用消息
      ieml[屬性]    用 E-mail 發(fā)送壓縮文件
      ierr          發(fā)送所有消息到標(biāo)準(zhǔn)錯(cuò)誤設(shè)備
      ilog[名稱]    把錯(cuò)誤寫到日志文件(只有注冊版本可用)
      inul          禁用所有消息
      ioff          完成一個(gè)操作后關(guān)閉 PC 電源
      isnd          啟用聲音
      k             鎖定壓縮文件
      kb            保留損壞的已解壓文件
      m<0..5>       設(shè)置壓縮級別(0-存儲...3-默認(rèn)...5-最大)
      mc<參數(shù)>      設(shè)置高級壓縮參數(shù)
      md<大小>      以KB為單位的字典大小(64,128,256,512,1024,2048,4096 or A-G)
      ms[ext;ext]   指定存儲的文件類型
      n<文件>       僅包含指定的文件
      n@            從標(biāo)準(zhǔn)輸入設(shè)備讀取文件名到包括
      n@<列表>      在指定的文件列表包括文件
      o+            覆蓋已存在文件
      o-            不覆蓋已存在文件
      oc            設(shè)置 NTFS 壓縮屬性
      os            保存 NTFS 流
      ow            保存或恢復(fù)文件所有者和組
      p[密碼]       設(shè)置密碼
      p-            不詢問密碼
      r             遞歸子目錄
      r0            僅遞歸通配符名稱的子目錄
      ri<P>[:<S>]   設(shè)置優(yōu)先級(0-默認(rèn),1-最小..15-最大)和以毫秒為單位的休眠時(shí)間
      rr[N]         添加數(shù)據(jù)恢復(fù)記錄
      rv[N]         創(chuàng)建恢復(fù)卷
      s[<N>,v[-],e] 創(chuàng)建固實(shí)壓縮文件
      s-            禁用固實(shí)壓縮文件
      sfx[名稱]     創(chuàng)建自解壓壓縮文件
      st[名稱]      從標(biāo)準(zhǔn)輸入設(shè)備讀取數(shù)據(jù)(stdin)
      t             壓縮后測試文件
      ta<日期>      添加日期 <日期> 后修改的文件,日期格式 YYYYMMDDHHMMSS
      tb<日期>      添加日期 <日期> 前修改的文件,日期格式 YYYYMMDDHHMMSS
      tk            保留原始壓縮文件時(shí)間
      tl            設(shè)置壓縮文件時(shí)間為最新文件時(shí)間
      tn<時(shí)間>      添加 <時(shí)間> 以后的文件
      to<時(shí)間>      添加 <時(shí)間> 以前的文件
      ts<m,c,a>[N]  保存或恢復(fù)文件時(shí)間(修改,創(chuàng)建,訪問)
      u             更新文件
      v             自動檢測創(chuàng)建卷的大小或者列出所有的卷
      v<大小>[k,b]  創(chuàng)建卷大小=<大小>*1000 [*1024, *1]
      vd            創(chuàng)建容量前清除磁盤內(nèi)容
      ver[n]        文件版本控制
      vn            使用舊風(fēng)格的卷命名方案
      vp            每卷之前暫停
      w<路徑>       指定工作目錄
      x<文件>       排除指定的文件
      x@            從標(biāo)準(zhǔn)輸入設(shè)備讀取要排除的文件名
      x@<列表>      排除指定列表文件中的文件
      y             假設(shè)對全部詢問都回答是
      z<文件>       從文件讀取壓縮文件注釋
    

    e.g.

    ::解壓縮f:\test.rar到文件夾f:\test\
    C:\program files\winrar\winrar.exe X f:\test.rar f:\test\
    ::將f:\test\文件夾內(nèi)容壓縮成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) '執(zhí)行解壓縮
    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) '執(zhí)行壓縮
    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

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容