本文將提供以 VBScript 呼叫 Windows 內建檔案壓縮、解壓縮功能的範例程式供讀者參考。
P.S. Windows XP (含 XP) 以後的版本方適用。
NOTE 欲複製程式碼的讀者,先將滑鼠指標移至程式碼區,雙擊 (Double-Click) 滑鼠左鍵,此時該區程式碼應會呈現 Highlight 狀態;再按下滑鼠右鍵,於出現的選單中選擇複製。若程式碼未出現 Highlight 狀態,請重整 (Refresh) 本網頁後,再重複上述動作。
建立測試環境
(1).建立目錄 C:\ZIP_TEST
(2).建立目錄 C:\ZIP_TEST\Target
(3).將欲測試的檔案存放至 C:\ZIP_TEST (假設該檔案名稱為 TEST.TXT)
壓縮程式
(1).將以下程式碼儲存為 C:\ZIP_TEST\MyZIP.vbs
(2).於 DOS 模式中,執行 cscript C:\ZIP_TEST\MyZIP.vbs 。
(3).待執行完畢後,可至 C:\ZIP_TEST 目錄中找到被壓縮的 TEST.ZIP 檔案。
Option Explicit
Dim Counter, CTF, objFileSys, objShell, SourceFile, TranBinary, TranHex, ZipFile
' 初始化 ------------------------------------------------------------
SourceFile = "C:\ZIP_TEST\TEST.TXT"
ZipFile = "C:\ZIP_TEST\TEST.ZIP"
Set objFileSys = CreateObject("Scripting.FileSystemObject")
Set CTF = objFileSys.CreateTextFile(ZipFile, True)
Set objShell = CreateObject("Shell.Application")
TranHex = Array(80, 75, 5, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0)
For Counter = 0 To UBound(TranHex)
TranBinary = TranBinary & Chr(TranHex(Counter))
Next
'--------------------------------------------------------------------
' 建立空白 ZIP 檔案 -------------------------------------------------
CTF.Write TranBinary
CTF.Close
'--------------------------------------------------------------------
' 加入欲壓縮資料至 ZIP 檔案 -----------------------------------------
objShell.NameSpace(ZipFile).CopyHere SourceFile
'--------------------------------------------------------------------
Set CTF = Nothing
Set objFileSys = Nothing
Set objShell = Nothing
Wscript.Sleep(6000)
解壓縮程式
(1).將以下程式碼儲存為 C:\ZIP_TEST\MyUNZIP.vbs
(2).於 DOS 模式中,執行 cscript C:\ZIP_TEST\MyUNZIP.vbs 。
(3).待執行完畢後,可至 C:\ZIP_TEST\Target 目錄中找到被解壓縮的 TEST.TXT 檔案。
Option Explicit
Dim DestPath objFile, objFileSys, objShell, SourceFolder, SourcePath, TargetFolder
SourceFolder = "C:\ZIP_TEST\"
TargetFolder = "C:\ZIP_TEST\Target"
Set objFileSys = CreateObject("Scripting.FileSystemObject")
Set objShell = CreateObject("WScript.Shell")
For Each objFile In objFileSys.GetFolder(SourceFolder).Files
If Right(UCase(objFile.Name), 4) = ".ZIP" Then
SourcePath = objFile.Path
DestPath = TargetFolder
Expand SourcePath, DestPath
End If
Next
Set objFileSys = Nothing
Set objShell = Nothing
Sub Expand(ByVal prmZipFile, ByVal prmDestPath)
Dim sobjFileSys
Dim sobjShell, ZipSource, ZipItems, ZipDestPath
Set sobjFileSys = CreateObject("Scripting.FileSystemObject")
If NOT sobjFileSys.FolderExists(prmDestPath) Then
sobjFileSys.CreateFolder(prmDestPath)
End If
Set sobjShell = CreateObject("Shell.Application")
Set ZipSource = sobjShell.NameSpace(prmZipFile)
Set ZipItems = ZipSource.Items()
Set ZipDestPath = sobjShell.NameSpace(prmDestPath)
ZipDestPath.CopyHere ZipItems, 16
Set sobjFileSys = Nothing
Set sobjShell = Nothing
End Sub