Автор: ComradG
Дата сообщения: 04.07.2010 18:36
Zipping/UnZipping. Пока только умеет работать с абсолютными путями.
[more=Код]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[/more]