1

Тема: WSH: архивация файлов средствами WinOS

Доброго времени суток, коллеги! Прекрасна возможность создания архивов штатными средствами ОС и тому пример из коллекции WSH: архивация файлов средствами операционной системы (WinXP), и я им пользуюсь (#2).
На практике же либо для удобства, либо под конкретные случаи чаще приходится подтачивать примеры... Так вот тут-то и возникает необходимость разбирать образцы "по молекулам". И мне не понятна необходимость проверки IsObject(Wscript) в функции CloseArchive, при том что в успехе все остальные (WsriptShell, FileSystemObject, Shell). В каких случаях IsObject(Wscript) дает результат false?

Второй вопрос по поводу самого процесса архивирования: начиная с некоторого объёма файла, выходит окно процесса сжатия. Нельзя ли как-нибудь без него (поменять режим там или еще что-нибудь подобное, средствами того же wsh)? Помнится мне, такое уже обсуждалось когда-то на форуме, но еще до переезда и чистки, чем же всё закончилось?

И наконец, при использовании обнаружил немаловажный, на мой взгляд, недочёт. Проявляется он при добавлении в архив более одного файла или папки: функция ожидания добавления объекта в архив теряет свой смысл, т.к. она проверяет наличие лишь одного файла, и тут начинаются проблемы... Если кому интересно или возможно нужно, привожу переделанный скрипт:

set FSO = CreateObject("Scripting.FileSystemObject")
set ShApp=CreateObject("Shell.Application")

zip=Crzip(Array("C:\object1","C:\object2"),"C:\Archive.zip")
msgbox "Архив создан: " & vbcrlf& zip
wscript.quit

Function CrZip(inObjs,zipFile)
 IF isArray(inObjs) then
 elseIF FSO.FolderExists(inObjs) or FSO.FileExists(inObjs) Then inObjs=Array(inObjs)
 else
  msgbox "Архив не создан. Не найдены объекты для добавления в архив."
  wscript.quit
 End IF
 FSO.OpenTextFile(zipFile,2,True).Write("PK"&Chr(5)&Chr(6)&String(18, 0)) : wscript.sleep 100
 Set toZipFile=Shapp.Namespace(zipFile)
 z=0
 For each inObj in inObjs
  if FSO.FolderExists(inObj) or FSO.FileExists(inObj) then
    toZipFile.CopyHere inObj  
    z=z+1 : Do : Wscript.Sleep 100 : Loop Until toZipFile.Items.Count=>z
  end if
 Next
 If z=0 then
  FSO.DeleteFile zipFile
  msgbox "Архив не создан. Не найдены объекты для добавления в архив."
  wscript.quit
 End If
 Crzip=zipFile
End Function

Комментируйте, и если сочтёте нужным - в коллекцию.

Стремление - залог успеха

2

Re: WSH: архивация файлов средствами WinOS

Некоторое время назад было обсуждение сходного функционала, но реализованного на JScript.

Однако поиском я ее не нашел, видимо она попала под нещадный нож резчиков форума. По какому критерию - не понятно.

Текст библиотеки можно посмотреть здесь - http://code.google.com/p/jsxt/source/br … ZipFile.js

( 2 * b ) || ! ( 2 * b )

3

Re: WSH: архивация файлов средствами WinOS

Lucky пишет:

Второй вопрос по поводу самого процесса архивирования: начиная с некоторого объёма файла, выходит окно процесса сжатия. Нельзя ли как-нибудь без него (поменять режим там или еще что-нибудь подобное, средствами того же wsh)?

toZipFile.CopyHere inObj, 4
В справке всё написано.

4

Re: WSH: архивация файлов средствами WinOS

Flasher пишет:

toZipFile.CopyHere inObj, 4
В справке всё написано.

Увы, но у меня выходит окно сжатия, может я что-то делаю не так? - не могли бы вы проверить это действие у себя..? (имею ввиду именно сжатие в zip, а не простое копирование в папку)

Стремление - залог успеха

5

Re: WSH: архивация файлов средствами WinOS

Lucky, не переживайте, при работе с архивом — никак не избавитесь. Обсуждалось на моей памяти раза три.