Zip-архивы.

Начиная с версии XP ОС Windows имеет встроенную поддержку работы с zip-архивами. Windows Explorer позволяет выполнять базовые операции сжатия/извлечения файлов. Для работы c zip-архивами в vbs-скриптах используется объект IShellDispatch, предоставляющий метод .NameSpace(), возвращающий объект виртуальной папки.

Для получения файлов из архива используется процедура ExtractFileFromZipArchive:

Sub ExtractFileFromZipArchive(targetFolderPath, zipFilePath, extractingFileName)

	Set shell = CreateObject("Shell.Application")

	Set extractingFolder  = shell.NameSpace(targetFolderPath)

	WScript.Echo "File(s) " & Chr(34) &  zipFilePath & "\" & extractingFileName & Chr(34) &  " is extracting.."

	Call extractingFolder.CopyHere(zipFilePath & "\" & extractingFileName, Int("&h1FFF"))'1FFF - битовые флаги

	WScript.Echo "Extracting is complete."

End Sub

Процедура ExtractEntireZipArchive распаковывает весь архив в указанную папку, используя процедуру ExtractFileFromZipArchive и предварительно проверяя наличие указанного архива и целевого каталога.

Sub ExtractEntireZipArchive(zipFilePath, targetFolderPath)

	Set fso = CreateObject("Scripting.FileSystemObject")

	If fso.FileExists(zipFilePath) Then'существует ли указанный архив

		If fso.FolderExists(targetFolderPath) Then'существует ли указанная целевая директория
			
			Set zipFile = fso.getFile(zipFilePath)

			extLen =  Len(fso.GetExtensionName(zipFile)) + 1'
                        'получить имя архива
			extractingFolderPath = targetFolderPath & "\" & Left(zipFile.Name, Len(zipFile.Name) - extLen)

			If Not fso.FolderExists(extractingFolderPath) Then'существует ли директория с таким именем

				Set extractingFolder = fso.CreateFolder(extractingFolderPath)

				Call ExtractFileFromZipArchive(extractingFolder.Path, zipFile.Path, "*.*")'распаковать

			Else'ошибка

				WScript.Echo "Folder " & Chr(34) & extractingFolderPath & Chr(34) & " already exists" 

			End If

		Else'ошибка

			WScript.Echo "Folder " & Chr(34) & targetFolderPath & Chr(34) & " was not found"

		End If

	Else'ошибка

		WScript.Echo "File " & Chr(34) & zipFilePath & Chr(34) & " was not found"

	End If

End Sub

Пример:

Call ExtractEntireZipArchive("archive.zip", ".")'распаковать архив в текущую папку