Автор Тема: 7za - вывести список файлов архива  (Прочитано 263 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн joiner [?]

  • Расмус-бродяга
  • AutoIt Гуру
  • *****
  • Сообщений: 2905
  • Репутация: 489
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.12.0
Использую ключ "L", получаю список, в котором и файлы и папки. Нужны только файлы любых расширений и без
В справке не нашел ответа.
или вариант только один - обрабатывать список?
Были времена, когда солнце было ярче, трава зеленее, а водка сорокоградуснее

Русское сообщество AutoIt

7za - вывести список файлов архива
« Отправлен: Апрель 13, 2019, 10:07:11 »

Онлайн Cytrus [?]

  • Новичок
  • *
  • Сообщений: 76
  • Репутация: 1
    • Награды
  • Версия AutoIt: 3.3.14.0
Re: 7za - вывести список файлов архива
« Ответ #1, Отправлен: Апрель 13, 2019, 16:44:18 »
Какого архива? 7z?

Оффлайн joiner [?]

  • Расмус-бродяга
  • AutoIt Гуру
  • *****
  • Сообщений: 2905

  • Автор темы
  • Репутация: 489
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.12.0
Re: 7za - вывести список файлов архива
« Ответ #2, Отправлен: Апрель 13, 2019, 17:00:10 »
именно. а есть разница? я результат получаю, но приходится просеивать. нужно обрабатывать строку, чтобы удалить пути к папкам.

Онлайн Cytrus [?]

  • Новичок
  • *
  • Сообщений: 76
  • Репутация: 1
    • Награды
  • Версия AutoIt: 3.3.14.0
Re: 7za - вывести список файлов архива
« Ответ #3, Отправлен: Апрель 13, 2019, 17:07:41 »
Пример из справки работает же.

Есть маска.

Код: AutoIt [Выделить]
$tINDIVIDUALINFO = _7ZipFindFirst($hArc, "*")
$tINDIVIDUALINFO = _7ZipFindFirst($hArc, "*.*")
$tINDIVIDUALINFO = _7ZipFindFirst($hArc, "*.txt")
$tINDIVIDUALINFO = _7ZipFindFirst($hArc, "*.exe")
 


Есть атрибуты.

Если атрибут не равер 0x10, то значит файл.

Код: AutoIt [Выделить]
#include <Date.au3>
#include <7Zip.au3>

$ArcFile = FileOpenDialog("Выберите архив", "", "Архивы (*.7z;*.zip;*.gzip;*.bzip2;*.tar)")
If @error Then Exit

$hArc = _7ZipOpenArchive(0, $ArcFile)
If $hArc = 0 Then Exit MsgBox(16, "_7ZipOpenArchive", "Ошибка")

$tINDIVIDUALINFO = _7ZipFindFirst($hArc, "*")
If $tINDIVIDUALINFO = -1 Then Exit

;Use functions to obtain files values
ConsoleWrite("!> FileName: " & _7ZipGetFileName($hArc) & @LF & _
             "OriginalSize: " & _7ZipGetArcOriginalSize($hArc) & @LF & _
             "CompressedSize: " & _7ZipGetArcCompressedSize($hArc) & @LF & _
             "ArcRatio: " & _7ZipGetArcRatio($hArc) & @LF & _
             "Date: " & _Date_Time_DOSDateToStr(_7ZipGetDate($hArc)) & @LF & _
             "Time: " & _Date_Time_DOSTimeToStr(_7ZipGetTime($hArc)) & @LF & _
             "CRC: " & _7ZipGetCRC($hArc) & @LF & _
             "Attribute: " & _7ZipGetAttribute($hArc) & @LF & _
             "Method: " & _7ZipGetMethod($hArc) & @LF & @LF)

;Or retrieve values from structure (the fast method)
While 1
    $tINDIVIDUALINFO = _7ZipFindNext($hArc, $tINDIVIDUALINFO)
    If $tINDIVIDUALINFO = 0 Then ExitLoop
   
    ConsoleWrite("!> FileName: " & DllStructGetData($tINDIVIDUALINFO, "szFileName") & @LF & _
                 "OriginalSize: " & DllStructGetData($tINDIVIDUALINFO, "dwOriginalSize") & @LF & _
                 "CompressedSize: " & DllStructGetData($tINDIVIDUALINFO, "dwCompressedSize") & @LF & _
                 "CRC: " & DllStructGetData($tINDIVIDUALINFO, "dwCRC") & @LF & _
                 "Flag: " & DllStructGetData($tINDIVIDUALINFO, "uFlag") & @LF & _
                 "OSType: " & DllStructGetData($tINDIVIDUALINFO, "uOSType") & @LF & _
                 "Ratio: " & DllStructGetData($tINDIVIDUALINFO, "wRatio") & @LF & _
                 "Date: " & _Date_Time_DOSDateToStr(DllStructGetData($tINDIVIDUALINFO, "wDate")) & @LF & _
                 "Time: " & _Date_Time_DOSTimeToStr(DllStructGetData($tINDIVIDUALINFO, "wTime")) & @LF & _
                 "Attribute: " & DllStructGetData($tINDIVIDUALINFO, "szAttribute") & @LF & @LF)
WEnd

_7ZipCloseArchive($hArc)


 


Русское сообщество AutoIt

Re: 7za - вывести список файлов архива
« Ответ #3 Отправлен: Апрель 13, 2019, 17:07:41 »

Оффлайн joiner [?]

  • Расмус-бродяга
  • AutoIt Гуру
  • *****
  • Сообщений: 2905

  • Автор темы
  • Репутация: 489
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.12.0
Re: 7za - вывести список файлов архива
« Ответ #4, Отправлен: Апрель 13, 2019, 17:21:07 »
Cytrus
ты не понял ))
я использую консольную версию 7za.exe
есть ключ L для выведения списка файлов архива в консоль. но выводит и список папок. думал, что есть добавочный аргумент для вывода только файлов, но в справке не нашел. в принципе, я уж написал обработку строк консоли, чтобы остались только файлы. но вдруг я в справке что-то не увидел, вот и спрашиваю

Онлайн Cytrus [?]

  • Новичок
  • *
  • Сообщений: 76
  • Репутация: 1
    • Награды
  • Версия AutoIt: 3.3.14.0
Re: 7za - вывести список файлов архива
« Ответ #5, Отправлен: Апрель 13, 2019, 17:48:59 »
Понял.

Без относительных путей невозможно вывести файлы.

Если только без рекурсии. Т.е., если они в корне архива.

С маской можно вывести рекурсионно все соответствующие типы файлов.
Но с относительными путями.

Это же не Total Commander, где можно вывести в панель все файлы, без подкаталогов.

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

MyFolder\Document.txt  - будет выводиться

MyFolder\                      - не будет выводиться.

« Последнее редактирование: Апрель 13, 2019, 18:02:12 от Cytrus »

Оффлайн joiner [?]

  • Расмус-бродяга
  • AutoIt Гуру
  • *****
  • Сообщений: 2905

  • Автор темы
  • Репутация: 489
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.12.0
Re: 7za - вывести список файлов архива
« Ответ #6, Отправлен: Апрель 13, 2019, 18:53:16 »
Маску подключить сложно, не знаю расширений. А нужны все файлы.


Добавлено: Апрель 13, 2019, 19:11:14
Файлы, естественно, нужны с путями как в архиве


Добавлено: Апрель 13, 2019, 22:32:04
на ru-board задал вопрос. ответ ниже
7za.exe l name.7z -ba -ir!*|findstr /c:"....A"
как я и предполагал, нужно самому обрабатывать полученные данные. в примере вызывается системная утилита.
« Последнее редактирование: Апрель 13, 2019, 22:32:24 от joiner »

Онлайн Cytrus [?]

  • Новичок
  • *
  • Сообщений: 76
  • Репутация: 1
    • Награды
  • Версия AutoIt: 3.3.14.0
Re: 7za - вывести список файлов архива
« Ответ #7, Отправлен: Апрель 14, 2019, 09:18:01 »
Да, справка там написана замудрённо.

Ну вот, берёте параметры, в которых устанавливаете ключи и маски.


;Вывести все файлы и папки.
7z.exe l C:\Temp\Archive.7z -r

;Вывести только файлы
7z.exe l C:\Temp\Archive.7z *.* -r

;Вывести только папки
7z.exe l C:\Temp\Archive.7z -x!*.* -r

;Вывести только *.txt
7z.exe l C:\Temp\Archive.7z *.txt -r

« Последнее редактирование: Апрель 14, 2019, 10:03:30 от Cytrus »

Русское сообщество AutoIt

Re: 7za - вывести список файлов архива
« Ответ #7 Отправлен: Апрель 14, 2019, 09:18:01 »

Оффлайн joiner [?]

  • Расмус-бродяга
  • AutoIt Гуру
  • *****
  • Сообщений: 2905

  • Автор темы
  • Репутация: 489
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.12.0
Re: 7za - вывести список файлов архива
« Ответ #8, Отправлен: Апрель 14, 2019, 09:39:39 »
консольная версия выводит всё, и папки и файлы.


я решил свой вопрос. в регулярке я не силен, поэтому сделал так
Код: AutoIt [Выделить]
#include <array.au3>

$Pid = Run('7za.exe L -slt -ba -ir!* 52991.7z -ai!45800.7z -ai!23230.7z', '', @SW_HIDE, 0x8)
Local $Read, $tmp
While Sleep(10)
    $Read = StdoutRead($Pid)
    If @error Then ExitLoop
    If $Read <> '' Then $tmp &= $Read
WEnd

Local $astr, $array[0]
If $tmp Then
    $astr = StringSplit($tmp, @LF)
    For $i = 1 To $astr[0]
        If StringInStr($astr[$i], 'Attributes = A') Then _ArrayAdd($array, StringReplace($astr[$i - 4], 'Path = ', ''))
    Next
    _ArrayDisplay($array); Выводит список всех файлов из трех архивов с относительными путями
EndIf


Русское сообщество AutoIt

Re: 7za - вывести список файлов архива
« Ответ #8 Отправлен: Апрель 14, 2019, 09:39:39 »

 

Похожие темы

  Тема / Автор Ответов Последний ответ
2 Ответов
6067 Просмотров
Последний ответ Июнь 02, 2011, 01:28:30
от Medic84
2 Ответов
4151 Просмотров
Последний ответ Март 10, 2011, 09:20:23
от pan1982
20 Ответов
10112 Просмотров
Последний ответ Май 18, 2011, 09:21:38
от RUVATA
3 Ответов
3537 Просмотров
Последний ответ Январь 10, 2012, 00:08:55
от Dm666
7 Ответов
3373 Просмотров
Последний ответ Ноябрь 18, 2012, 14:07:19
от s0me0ne
3 Ответов
1898 Просмотров
Последний ответ Апрель 17, 2014, 12:25:58
от nomad_soul
2 Ответов
1476 Просмотров
Последний ответ Сентябрь 14, 2014, 16:27:40
от sasha-ld
3 Ответов
1696 Просмотров
Последний ответ Октябрь 28, 2014, 15:43:06
от InnI
5 Ответов
1823 Просмотров
Последний ответ Октябрь 25, 2015, 17:10:19
от Dm666
3 Ответов
925 Просмотров
Последний ответ Октябрь 20, 2017, 19:48:38
от joiner