1

Тема: VBScript: работа с CAB архивами

Бесплатный COM-сервер jsCAB Component предоставляет методы для работы с CAB файлами: создание и распаковка, получение информации о файле и преобразование самораспаковывающегося EXE CAB файла в нормальный CAB файл. Дистрибутив (архив) компонента имеет размер около 80 Кб. Пример:

Set oCAB = CreateObject("jsCAB.Ops")
' создание архива:
suc = oCAB.MakeCABFile("C:\Temp\test.cab", "C:\Temp\test1.jpg|C:\Temp\test2.jpg")
' получение информации об архиве:
Set oInfo = oCAB.GetCABInfo("C:\Temp\test.cab")
WScript.Echo oInfo.Path
WScript.Echo oInfo.IsValidCAB ' 0 - normal, 1 - InstallShield CAB, 2 - not a CAB
WScript.Echo oInfo.Solitary ' True - stand-alone CAB
' обход содержимого:
For i = 0 to oInfo.FileCount - 1
   WScript.Echo oInfo.FileName(i) ' имя файла
   WScript.Echo oInfo.FileDate(i) ' дата изменения
   WScript.Echo oInfo.FileSize(i) ' размер в Кб
Next
WScript.Echo oInfo.FileExists("test2.jpg") ' проверка существования файла
' ещё один способ обхода содержимого:
For i = 0 to UBound(oInfo.FileList)
    WScript.Echo oInfo.FileName(i)
Next
For Each el In oInfo.FileList
    WScript.Echo el
Next
' извлечение из архива указанного файла:
suc = oCAB.ExtractSingleFile("C:\Temp\test.cab", "C:\Temp\Testing", "test1.jpg")
' распаковка архива:
suc = oCAB.ExtractCABFiles("C:\Temp\test.cab", "C:\Temp\Testing")

См. также WSH: архивация файлов средствами операционной системы (WinXP).

Предложения в русском языке начинаются с большой буквы и заканчиваются точкой.
В названии ветки всегда должен быть указан язык программирования или среда исполнения скрипта, если это возможно.

2

Re: VBScript: работа с CAB архивами

Работает под Windows XP/2003. Создание архива работает и под Windows 2000.

Option Explicit

Dim objCAB
Dim objFSO
Dim objFile
Dim objShell

Dim objFolderItem

Set objCAB   = WScript.CreateObject("MakeCab.MakeCab") ' Под Windows 2000 указывать напрямую только зависимый от версии CLSID — "MakeCab.MakeCab.1"
Set objFSO   = WScript.CreateObject("Scripting.FileSystemObject")
Set objShell = WScript.CreateObject("Shell.Application")


'
' Создание cab-файла
'
objCAB.CreateCab "C:\Test.cab", False, False, False ' Под Windows 2000 — только три параметра

' Добавляем в cab-файл все файлы из папки C:\Temp под теми же именами
For Each objFile In objFSO.GetFolder("C:\Temp").Files
    objCAB.AddFile objFile.Path, objFile.Name
Next

objCab.CloseCab


'
' Просмотр содержимого cab-файла
'
For Each objFolderItem In objShell.Namespace("C:\Test.cab").Items
    WScript.Echo objFolderItem.Name
Next


'
' Извлечение содержимого cab-файла в папку
'
If Not objFSO.FolderExists("c:\Test") Then
    objFSO.CreateFolder "c:\Test"
End If

objShell.Namespace("c:\Test").CopyHere objShell.Namespace("C:\Test.cab").Items


Set objShell = Nothing
Set objFSO   = Nothing
Set objCAB   = Nothing

WScript.Quit 0

P.S. Некоторые несознательные программы портят и не восстанавливают за собой правильные ассоциации для .cab файлов, вследствие чего скрипт может работать некорректно. Вот файл реестра, который вернёт настройки ассоциации для типа файлов .cab по умолчанию (для Windows XP):

RestoreCabAssocDefaults.reg

REGEDIT4

[HKEY_CLASSES_ROOT\.cab]
@="CLSID\\{0CD7A5C0-9F37-11CE-AE65-08002B2E1262}"
"InfoTip"="Содержит сжатые файлы"

[HKEY_CLASSES_ROOT\.cab\PersistentHandler]
@="{098f2470-bae0-11cd-b579-08002b30bfeb}"