ComradG
Silver Member | Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору Option Explicit Dim arg Dim optind 'Справка по параметрам If WScript.Arguments.Count < 1 Then WScript.Echo "Синтаксис: zip.vbs [-a|-e] zip-файл [файлы...]" WScript.Echo " -a - добавить файлы в архив" WScript.Echo " -e - распаковать архив" WScript.Echo "Скрипт пока может обрабатывать только полные" WScript.Echo "пути, так как находится в стадии разработки." WScript.Quit End If 'Обработчик аргументов arg = WScript.Arguments(optind) Select Case LCase(arg) Case "-a" optind = optind + 1 Call MakeZIP() Case "-e" optind = optind + 1 Call ExtractZIP() End Select WScript.Quit 'Обработчик создания zip-архива Sub MakeZIP() Dim fso, wShell, Shell, n, IE, ZIPFile, file, folder, folderItem, dFolder Dim ZIPHeader:ZIPHeader = "PK" & Chr(5) & Chr(6) & String(18, Chr(0)) 'Проверка наличия параметров после ключа архивирования If WScript.Arguments.Count < optind + 2 Then WScript.Echo "Неверные параметры командной строки." WSript.Quit End If Set fso = CreateObject("Scripting.FileSystemObject") Set wShell = CreateObject("WScript.Shell") Set Shell = CreateObject("Shell.Application") For n = 0 to 9 For Each IE in Shell.Windows If Not IE.Busy Then If IE.ReadyState = 4 Then If InStr(TypeName(IE.Document), "IShellFolderViewDual") = 1 Then Exit For End If End If End If Next If Not IsEmpty(IE) Then Exit For If n = 0 Then CreateObject("WScript.Shell").Run "explorer.exe", 0, true WScript.Sleep 500 Next If IsEmpty(IE) Then WScript.Echo "Непредвиденная ошибка." WScript.Quit End If Set Shell = IE.Document.Application ZIPFile = fso.GetAbsolutePathName(WScript.Arguments(optind)) 'Валидация расширения архива If UCase(fso.GetExtensionName(ZIPfile)) <> "ZIP" Then WScript.Echo "Неверное расширение файла.", fso.GetExtensionName(ZIPFile) WScript.Quit End If 'Проверяем существует ли архив If Not fso.FileExists(ZIPfile) Then fso.CreateTextFile(ZIPfile, false).Write ZIPHeader End If Set dFolder = Shell.NameSpace(ZIPfile) 'Добавляем файлы в архив For optind = optind + 1 to WScript.Arguments.Count - 1 file = fso.GetAbsolutePathName(WScript.Arguments(optind)) Set folder = Shell.NameSpace(fso.GetParentFolderName(file)) Set folderItem = folder.ParseName(fso.GetFileName(file)) If folderItem Is Nothing Then WScript.Echo WScript.Arguments(optind), "Неверный параметр." WScript.Quit End If dFolder.CopyHere folderItem Next End Sub 'Обработчик распаковки zip-архива Sub ExtractZIP() Dim fso, Shell, ZIPFile, folder, folderItem, dFolder 'Проверка наличия параметров после ключа распаковки If WScript.Arguments.Count < optind + 1 Then WScript.Echo "Неверные параметры командной строки." WScript.Quit End If Set fso = CreateObject("Scripting.FileSystemObject") Set Shell = CreateObject("Shell.Application") ZIPfile = fso.GetAbsolutePathName(WScript.Arguments(optind)) 'Валидация расширения архива If UCase(fso.GetExtensionName(ZIPfile)) <> "ZIP" Then WScript.Echo "Неверное расширение файла.", fso.GetExtensionName(ZIPfile) WScript.Quit End If Set folder = Shell.NameSpace(ZIPfile) Set dFolder = Shell.NameSpace(fso.GetAbsolutePathName("")) 'Извлекаем файлы из архива If WScript.Arguments.Count < optind + 2 Then dFolder.CopyHere folder.Items Else For optind = optind + 1 to WScript.Arguments.Count - 1 Set folderItem = folder.ParseName(Wscript.Arguments(optind)) If folderItem Is Nothing Then WScript.Echo WScript.Arguments(optind), "Лишний параметр." WScript.Quit End If dFolder.CopyHere folderItem Next End If End Sub | Всего записей: 2038 | Зарегистр. 05-07-2008 | Отправлено: 19:36 04-07-2010 | Исправлено: ComradG, 19:36 04-07-2010 |
|