<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
	<channel>
		<title><![CDATA[Серый форум &mdash; VBScript: работа с CAB архивами]]></title>
		<link>https://forum.script-coding.com/viewtopic.php?id=2924</link>
		<atom:link href="https://forum.script-coding.com/extern.php?action=feed&amp;tid=2924&amp;type=rss" rel="self" type="application/rss+xml" />
		<description><![CDATA[Недавние сообщения в теме «VBScript: работа с CAB архивами».]]></description>
		<lastBuildDate>Wed, 13 May 2009 11:15:49 +0000</lastBuildDate>
		<generator>PunBB</generator>
		<item>
			<title><![CDATA[Re: VBScript: работа с CAB архивами]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=22909#p22909</link>
			<description><![CDATA[<p>Работает под Windows XP/2003. Создание архива работает и под Windows 2000.<br /></p><div class="codebox"><pre><code>Option Explicit

Dim objCAB
Dim objFSO
Dim objFile
Dim objShell

Dim objFolderItem

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


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

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

objCab.CloseCab


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


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

objShell.Namespace(&quot;c:\Test&quot;).CopyHere objShell.Namespace(&quot;C:\Test.cab&quot;).Items


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

WScript.Quit 0</code></pre></div><p>P.S. Некоторые несознательные программы портят и не восстанавливают за собой правильные ассоциации для .cab файлов, вследствие чего скрипт может работать некорректно. Вот файл реестра, который вернёт настройки ассоциации для типа файлов .cab по умолчанию (для Windows XP):</p><p><strong><em>RestoreCabAssocDefaults.reg</em></strong><br /></p><div class="codebox"><pre><code>REGEDIT4

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

[HKEY_CLASSES_ROOT\.cab\PersistentHandler]
@=&quot;{098f2470-bae0-11cd-b579-08002b30bfeb}&quot;</code></pre></div>]]></description>
			<author><![CDATA[null@example.com (alexii)]]></author>
			<pubDate>Wed, 13 May 2009 11:15:49 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=22909#p22909</guid>
		</item>
		<item>
			<title><![CDATA[VBScript: работа с CAB архивами]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=20657#p20657</link>
			<description><![CDATA[<p>Бесплатный COM-сервер <a href="http://www.jsware.net/jsware/scripts.php5#jscab">jsCAB Component</a> предоставляет методы для работы с CAB файлами: создание и распаковка, получение информации о файле и преобразование самораспаковывающегося EXE CAB файла в нормальный CAB файл. Дистрибутив (архив) компонента имеет размер около 80 Кб. Пример:<br /></p><div class="codebox"><pre><code>Set oCAB = CreateObject(&quot;jsCAB.Ops&quot;)
&#039; создание архива:
suc = oCAB.MakeCABFile(&quot;C:\Temp\test.cab&quot;, &quot;C:\Temp\test1.jpg|C:\Temp\test2.jpg&quot;)
&#039; получение информации об архиве:
Set oInfo = oCAB.GetCABInfo(&quot;C:\Temp\test.cab&quot;)
WScript.Echo oInfo.Path
WScript.Echo oInfo.IsValidCAB &#039; 0 - normal, 1 - InstallShield CAB, 2 - not a CAB
WScript.Echo oInfo.Solitary &#039; True - stand-alone CAB
&#039; обход содержимого:
For i = 0 to oInfo.FileCount - 1
   WScript.Echo oInfo.FileName(i) &#039; имя файла
   WScript.Echo oInfo.FileDate(i) &#039; дата изменения
   WScript.Echo oInfo.FileSize(i) &#039; размер в Кб
Next
WScript.Echo oInfo.FileExists(&quot;test2.jpg&quot;) &#039; проверка существования файла
&#039; ещё один способ обхода содержимого:
For i = 0 to UBound(oInfo.FileList)
    WScript.Echo oInfo.FileName(i)
Next
For Each el In oInfo.FileList
    WScript.Echo el
Next
&#039; извлечение из архива указанного файла:
suc = oCAB.ExtractSingleFile(&quot;C:\Temp\test.cab&quot;, &quot;C:\Temp\Testing&quot;, &quot;test1.jpg&quot;)
&#039; распаковка архива:
suc = oCAB.ExtractCABFiles(&quot;C:\Temp\test.cab&quot;, &quot;C:\Temp\Testing&quot;)</code></pre></div><p>См. также <a href="http://forum.script-coding.com/viewtopic.php?id=296">WSH: архивация файлов средствами операционной системы (WinXP)</a>.</p>]]></description>
			<author><![CDATA[null@example.com (The gray Cardinal)]]></author>
			<pubDate>Sat, 14 Mar 2009 10:57:55 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=20657#p20657</guid>
		</item>
	</channel>
</rss>
