Что нового

Как распаковать архив zip с помощью скрипта _Zip_UnzipAll.au3

alex2887

Новичок
Сообщения
57
Репутация
0
Всем привет, объясните пожалуйста, как распаковать архив zip с помощью скрипта
Код:
#Include <_Zip.au3>
_Zip_UnzipAll($sZipFile, $sDestPath[, $iFlag = 20])
Есть архив, который лежит на диске с:, мне нужно распаковать его содержимое на диск D: в папку Тест. Если не трудно, напишите как это должно будет выглядеть, заранее спасибо.
Вот так вот я пробовал, но ничего не получается
Код:
#Include <_Zip.au3>
_Zip_UnzipAll('C:\AIMP.zip', 'D:\Тест')
 

ra4o

AutoIT Гуру
Сообщения
1,165
Репутация
246
У меня Ваш пример отработал нормально. В консоли ошибки пишет ? Существует ли у Вас папка назначения "Тест"?
На всякий случай мой вариант библиотеки, а то какое-то странное значение флага в Вашем варианте - "20" , у меня он может быть либо "0" либо "1".
 

Вложения

  • Zip.au3
    21.9 КБ · Просмотры: 35
Автор
A

alex2887

Новичок
Сообщения
57
Репутация
0
ra4o сказал(а):
У меня Ваш пример отработал нормально. В консоли ошибки пишет ? Существует ли у Вас папка назначения "Тест"?
На всякий случай мой вариант библиотеки, а то какое-то странное значение флага в Вашем варианте - "20" , у меня он может быть либо "0" либо "1".
Да, папка "Тест" существует, пишет вот такую ошибку при выполнении:
Код:
C:\_Zip_UnzipAll.au3 (1) : ==> Error opening the file.: 
#Include<_Zip.au3>
 

ra4o

AutoIT Гуру
Сообщения
1,165
Репутация
246
Он пишет , что ошибка открытия "_Zip.au3" он точно так называется ? Впереди в названии UDF есть эта черта "_"если нет - уберите её , файл лежит рядом со скриптом или в папке "include" в дирректории с AutoIt ?
 
Автор
A

alex2887

Новичок
Сообщения
57
Репутация
0
Извините что отнимаю Ваше время, но я вообще ничего не понял по этим скриптам, в голове теперь у меня каша.... Как их правильно оформлять, что за чем идет.... :'( Походу это просто не мое. Я прочитал справку, но там все так запутано, что без поллитра там не разобраться :'(
 

ra4o

AutoIT Гуру
Сообщения
1,165
Репутация
246
Вот Ваш код:
Код:
#Include <Zip.au3>
_Zip_UnzipAll('C:\AIMP.zip', 'D:\Тест')
В первой строке Вы включаете библиотеку с дополнительными, пользовательскими функциями в свой скрипт. Функция "_Zip_UnzipAll" есть в UDF "Zip.au3", вот Вы её и подключаете. Вот, что пишут в справке :
Если используется <...>, путь к файлу вычисляется относительно каталога библиотек для включения (обычно C:\Program Files\AutoIt3\Include). Эти библиотеки содержат огромнейшее число пользовательских функций для использования!
Если эта UDF не идёт в стандартном наборе с AutoIt, а Вы её скачали отдельно, то её необходимо поместить в папку "C:\Program Files\AutoIt3\Include"(для 32 битной версии Windows, для х64 будет "C:\Program Files (x86)\AutoIt3\Include")или поместить в папку рядом со скриптом. Ошибка, что у Вас говорит о том, что не найдена эта самая UDF , причины - название отличается от того, что указали в скрипте, либо её вообще нет по выше указанному пути.
 
Автор
A

alex2887

Новичок
Сообщения
57
Репутация
0
ra4o, спасибо за то что помогаете, Вы можете мне написать этот скрипт так, как он должен быть написан, если Вас не затруднит? А то я никак не могу понять как это сделать
 

ra4o

AutoIT Гуру
Сообщения
1,165
Репутация
246
Для разархивирования файла - там всего две строчки , я их написал в прошлом сообщении. Просто скопируйте файл "Zip.au3" (можно и рядом со скриптом положить) и запустите скрипт, если будут ошибки - напишите.
Вот, запустите этот скрипт и скажите, какую ошибку пишет в консоли
Код:
#Include <Zip.au3>
_Zip_UnzipAll('C:\AIMP.zip', 'D:\Тест')
ConsoleWrite('Ошибка №'&@error&@CR)
 
Автор
A

alex2887

Новичок
Сообщения
57
Репутация
0
ra4o, спасибо Вам большое, все получилось. И тогда можно еще один вопрос задать? Что в этом скрипте означает, написанное начиная с "Local $DLLChk = _Zip_DllChk()" и заканчивая "EndFunc ;==>_Zip_UnzipAll" ? Как это называется и что означает

Код:
Func _Zip_UnzipAll($hZipFile, $hDestPath, $flag = 1)
	Local $DLLChk = _Zip_DllChk()
	If $DLLChk <> 0 Then Return SetError($DLLChk, 0, 0);no dll
	If not _IsFullPath($hZipFile) then Return SetError(4,0) ;zip file isn't a full path
	If Not FileExists($hZipFile) Then Return SetError(2, 0, 0) ;no zip file
	If Not FileExists($hDestPath) Then DirCreate($hDestPath)
	Local $aArray[1]
	$oApp = ObjCreate("Shell.Application")
	$oApp.Namespace($hDestPath).CopyHere($oApp.Namespace($hZipFile).Items)
	For $item In $oApp.Namespace($hZipFile).Items
		_ArrayAdd($aArray, $item)
	Next
	While 1
		If $flag = 1 then _Hide()
		If FileExists($hDestPath & "\" & $aArray[UBound($aArray) - 1]) Then
			Return SetError(0, 0, 1)
			ExitLoop
		EndIf
		Sleep(500)
	WEnd
EndFunc   ;==>_Zip_UnzipAll
 

ra4o

AutoIT Гуру
Сообщения
1,165
Репутация
246
Если пролистаете дальше UDF "Zip.au3" , то увидите функцию _Zip_DllChk()
Код:
Func _Zip_DllChk()
	If Not FileExists(@SystemDir & "\zipfldr.dll") Then Return 2
	If Not RegRead("HKEY_CLASSES_ROOT\CLSID\{E88DCCE0-B7B3-11d1-A9F0-00AA0060FA31}", "") Then Return 3
	Return 0
EndFunc   ;==>_Zip_DllChk
которая проверяет наличие библиотеки "zipfldr.dll" в @SystemDir и проверяет регистрацию в системе этой dll через ключ реестра "HKEY_CLASSES_ROOT\CLSID\{E88DCCE0-B7B3-11d1-A9F0-00AA0060FA31}"
Не понял сразу вопрос :-[
Это всё и есть тело функции "_Zip_UnzipAll()"
 

Garrett

Модератор
Локальный модератор
Сообщения
3,999
Репутация
967
alex2887

Предупреждение За нарушение правил форума (пункт В.11):
Любые отрывки AutoIt кода необходимо заключать в тег [autoit]
autoit.gif
(подробнее), а обычный код соответственно в тег [code]
code.gif
(подробнее). Также большие выдержки текста помещайте под тег [spoiler]
spoiler.gif
(подробнее), там где это поддерживается естественно. Как в случае с названием темы, также короткое и эргономичное сообщение привлекает больше внимания, и шансы на получение конкретного ответа увеличиваются.


С уважением, ваш Глобальный модератор.
 

titanwww

Новичок
Сообщения
2
Репутация
0
А как распаковать если в 1 каталоге разные архивы zip и имена их неизвестны изначально. Скажу так распаковать все архивы из заданного каталога
 

ra4o

AutoIT Гуру
Сообщения
1,165
Репутация
246
Получаете список всех файлов с расширением zip в каталоге ( _FileListToArray ) и дальше в цикле всё распаковываете
Например так ;
Код:
#include "Zip.au3"
#include <File.au3>

$FolderFrom = FileSelectFolder("Выбор папки откуда взять архивы", @ScriptDir)
$FolderTo = FileSelectFolder("Выбор папки куда распаковать архивы", @ScriptDir, 1)
$AllZipFile = _FileListToArray($FolderFrom, "*.zip", 1)
For $i = 1 To $AllZipFile[0]
    _Zip_UnzipAll($FolderFrom & '\' & $AllZipFile[$i], $FolderTo)
Next
 
Последнее редактирование:
Верх