引言
工作中常常用到壓縮文件或?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
代碼
-
批量解壓縮
將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 -
批量壓縮文件
將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