Что нового

Разархивировать все *.zip в директории и поддиректориях по указанному пути.

rogalicc

Новичок
Сообщения
7
Репутация
0
День Добрый,

подскажите пожалуйста как определить все *.zip архивы во всех поддиректориях и распаковать их там же?

Нижеупомянутый скрипт берет данные обо всех файлах и папках и копирует информацию в буфер обмена

Код:
#include <Array.au3>

$aFilesList = _FileListToArrayParse(@HomeDrive & "\All_files", "*", -1)
_ArrayDisplay($aFilesList)

Func _FileListToArrayParse($sPath, $sMask="*", $iMode=-1) ;$iMode > 0 только папки, иначе папки + файлы
    If Not StringInStr(FileGetAttrib($sPath), "D") Then Return SetError(1, 0, 0)

    Local $PathesArr[2] = [1, $sPath]
    Local $hSearch, $sFindNext, $i

    While $i < $PathesArr[0]
        $i += 1
        $hSearch = FileFindFirstFile($PathesArr[$i] & "\" & $sMask)
        If $hSearch = -1 Then ContinueLoop
        While 1
            $sFindNext = FileFindNextFile($hSearch)
            If @error Then ExitLoop
            $sFindNext = $PathesArr[$i] & "\" & $sFindNext
            If $iMode <= 0 Or ($iMode = 1 And StringInStr(FileGetAttrib($sFindNext), "D")) Then
                $PathesArr[0] += 1
                ReDim $PathesArr[$PathesArr[0]+1]
                $PathesArr[$PathesArr[0]] = $sFindNext
            EndIf
        WEnd
        FileClose($hSearch)
    Wend
	 _ArrayToClip ($PathesArr)
EndFunc
 

beliy

Продвинутый
Сообщения
372
Репутация
72
Примерно так:
Код:
#include<File.au3>
#include<Array.au3>
#include<Zip.au3>
Global $sFldr, $hDestPath, $aFiles
$sFldr = FileSelectFolder("Укажите папку с zip-файлами:", @ScriptDir, 2) & "\"
If NOT @Error Then $hDestPath = FileSelectFolder("Укажите папку в которую нужно распаковать zip-файлы:", $sFldr, 7) & "\"
If @Error Then Exit
$aFiles = _FileListToArray($sFldr, "*.zip", 1)
_ArrayDisplay($aFiles)
For $i = 1 To UBound($aFiles) -1
	 If NOT _Zip_UnzipAll($sFldr & $aFiles[$i], $hDestPath, 0) Then ; Измените 0 на 1 чтобы убрать прогрессбар
		MsgBox(4096, "Error", "Невожможно распаковать файл: " & @CRLF & $aFile[$i])
		ContinueLoop
	EndIf
Next
MsgBox(4096, "UNZIP", "Файлы успешно распакованы...")


Zip.au3 качаем отсюда
 
Автор
R

rogalicc

Новичок
Сообщения
7
Репутация
0
День добрый.

Большое спасибо, все очень наглядно, но у меня видимо еще мало опыта и проблемы с формулированием своих.. Возможно сделать так чтобы скрипт сам находил все *.zip в директории и поддиректориях и распаковывал их там же. Т.е. по определенному пути скрипт смотрит в глубь на 3-4 папки и разархивирует содержимое архива в те папки в которых находяться *.zip?
 

beliy

Продвинутый
Сообщения
372
Репутация
72
Попробуйте так:

Код:
#include<file.au3>
#include<array.au3>
#include<Zip.au3>
#include<FileOperations.au3> ; http://www.autoitscript.com/forum/topic/133224-filesearch-foldersearch/
Global $sFldr, $hDestPath, $aFiles
$sFldr = FileSelectFolder("Укажите папку с zip-файлами:", @ScriptDir, 2) & "\"
If NOT @Error Then $hDestPath = FileSelectFolder("Укажите папку в которую нужно распаковать zip-файлы:", $sFldr, 7) & "\"
If @Error Then Exit
$aFiles=_FO_FileSearch($sFldr, 'zip', True, 125, 1, 1, 0)
_ArrayDisplay($aFiles)
For $i = 1 To UBound($aFiles) -1
	 If NOT _Zip_UnzipAll($aFiles[$i], $hDestPath, 0) Then ; Измените 0 на 1 чтобы убрать прогрессбар
		MsgBox(4096, "Error", "Невожможно распаковать файл: " & @CRLF & $aFile[$i])
		ContinueLoop
	EndIf
Next
MsgBox(4096, "UNZIP", "Файлы успешно распакованы...")
 
Автор
R

rogalicc

Новичок
Сообщения
7
Репутация
0
beliy, то что нужно, большое спасибо!
 
Верх