С Новым годом! Форум программистов, компьютерный форум, киберфорум
VBA
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.68/98: Рейтинг темы: голосов - 98, средняя оценка - 4.68
1711 / 578 / 76
Регистрация: 10.04.2009
Сообщений: 9,298

Как распаковать ZIP-файл в 7z?

07.02.2011, 18:38. Показов 21025. Ответов 20
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
'При помощи VBA WinRAR распаковывает архив в папку …
Visual Basic
1
2
3
4
q = Адрес_сохранения_файла 'путь к каталогу, то есть к папке, в конце пути для распаковки должен присутствовать обратный слеш
b = Адрес_сохранения_файла & Имя_сохранённого_файла 'путь к файлу
'ошибка 53 File not found  Файл не найден когда отсутсвует WinRAR
Shell "C:\Program Files\WinRAR\rar.exe e " & b & " " & q 'файл b при помощи WinRAR распаковываем в папку q
как распаковать Зипом, попробовал так, не получилось???????? и что означает последная буква е: "rar.exe e "
пробовал так, не получилось
Visual Basic
1
Shell "C:\Program Files\7-Zip\7z.exe e " & b & " " & q
и сразу как сделать чтобы переписывались файлы без подтверждения и при этом не появлялось окно - диалог
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
07.02.2011, 18:38
Ответы с готовыми решениями:

Как программно распаковать Zip файл
Возможно ли штатными средствами .net или на край виндовыми библиотеками стандаратными распаковать архив?

Программно распаковать zip файл
Необходимо распаковать MACHINEDATA.TT.ZIP файл. Использовав пример из https://www.cyberforum.ru/vb-net/thread343195-page3.html получился...

Как распаковать файл из архива внутри архива? Ionic.Zip
Всем привет! Пишу программу для распаковки файла "Main.xml" в ZIP архиве "Test2" в ZIP архиве "Test". Для лучшего понимание...

20
204 / 43 / 6
Регистрация: 15.10.2010
Сообщений: 125
08.02.2011, 13:08
Попробуйте так (у меня извлекает без подтверждения):

Visual Basic
1
2
3
4
5
6
Dim b$, q$
 
DisplayAlerts = False
q = "C:\"
b = "C:\Test.rar"
Shell "C:\Program Files\WinRAR\rar.exe e " & b & " " & q, vbHide
Есть еще сочетание клавиш (Alt W - извлечь без подтверждения) (синтаксис ниже), но как отправить эту команду в rar, не нашла.
Visual Basic
1
Application.OnKey "%W"
0
1711 / 578 / 76
Регистрация: 10.04.2009
Сообщений: 9,298
08.02.2011, 20:43  [ТС]
Цитата Сообщение от Ципихович Эндрю Посмотреть сообщение
как распаковать Зипом
спасибо я попробую, а это сработает как в вопросе???
Если нет то как??

Добавлено через 1 минуту
Цитата Сообщение от Ципихович Эндрю Посмотреть сообщение
что означает последная буква е: "rar.exe e "
Также не сказали, подскажете??

Добавлено через 1 час 31 минуту
так и есть, проверил я, представленный код Зиповские файлы не распаковывает, вообще то вручную Винрар Зиповские файлы распаковывает, но с этим кодом увы нет!
0
437 / 144 / 9
Регистрация: 12.01.2009
Сообщений: 678
Записей в блоге: 1
09.02.2011, 18:41
Лично я бы посоветовал пользоваться вот этим макросом (не помню где его нашёл, но думаю, что и вы при поиске на него наткнетесь!) Символы e, o +- и т.д. можно найти в описании WinRAR. Они используются тогда, когда вы работаете с Rar через консоль.:
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
Sub UnRar()
'Разархивируем архив C:\Temp\Test 5.rar
WinRarApp$ = "C:\Program Files\WinRAR\WinRAR.exe e -o+"
' e - разархивировать
' -o+ - перезаписывать существующие файлы
iPath = "C:\Temp\"
iArhivName$ = "Test 5.rar"
'добавляем двойные кавычки, что позволит нам работать с именем файла и путём, которые содержат пробелы.
'без кавычек пробелы недопустимы
adr$ = WinRarApp$ & " """ & iPath & iArhivName$ & """ """ & iPath & """ "
RetVal = Shell(adr$, vbHide) 'vbNormalFocus)
End Sub
А вместо функции Shell лучше воспользоваться этой ShellAndWait для того, чтобы дождаться момента когда архив будет распакован и сделать с ним то, что вам угодно.
На счёт зипа возник вопрос зачем? (Случай когда в системе RAR не стоит?)

Добавлено через 20 минут
Вот я кстати это раньше описывал)
Как это делать зипом
1
1711 / 578 / 76
Регистрация: 10.04.2009
Сообщений: 9,298
09.02.2011, 21:08  [ТС]
Я добился того, что ВинРаром распаковываю и Зиповские и Винраровские файлы, можно было остановиться, но хотел уж усвоить как именно Зипом, по ссылкам нашёл и пробую:
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
q = "L:\Изменённые\"
b = "L:\Изменённые\1.rar"
 
Shell "C:\Program Files\7-Zip\7z.exe -min -e -o " & b & " " & q
 
  '-f   freshen: only changed files  -u   update: only changed or new files
  '-d   delete entries in zipfile    -m   move into zipfile (delete files)
  '-r   recurse into directories     -j   junk (don't record) directory names
  '-0   store only                   -l   convert LF to CR LF (-ll CR LF to LF)
  '-1   compress faster              -9   compress better
  '-q   quiet operation              -v   verbose operation/print version info
  '-c   add one-line comments        -z   add zipfile comment
  '-@   read names from stdin        -o   make zipfile as old as latest entry
  '-x   exclude the following names  -i   include only the following names
  '-F   fix zipfile (-FF try harder) -D   do not add directory entries
  '-A   adjust self-extracting exe   -J   junk zipfile prefix (unzipsfx)
  '-T   test zipfile integrity       -X   eXclude eXtra file attributes
  '-!   use privileges (if granted) to obtain all aspects of WinNT security
  '-R   PKZIP recursion (see manual)
  '-$   include volume label         -S   include system and hidden files
  '-h   show this help               -n   don't compress these suffixes
не получается, в то же время не увидел пояснения опциям -min -e в Зипе
Подскажите пжл
0
197 / 189 / 15
Регистрация: 09.02.2011
Сообщений: 457
09.02.2011, 22:11
Думаю что e - это extract(извлечь)

Добавлено через 32 минуты
Не понял как редактировать свой ответ (((


Visual Basic
1
2
3
b = "L:\Изменённые\1.rar"
 
Shell "C:\Program Files\7-Zip\7z.exe e " & b

вот так должно работать
0
1711 / 578 / 76
Регистрация: 10.04.2009
Сообщений: 9,298
10.02.2011, 19:36  [ТС]
Visual Basic
1
2
3
4
5
6
7
q = "L:\Изменённые\"
b = "L:\Изменённые\1.rar"
Shell "C:\Program Files\7-Zip\7z.exe -min -e -o " & b & " " & q
Shell "C:\Program Files\7-Zip\7z.exe e " & b & " " & q
 
b = "L:\Изменённые\1.rar"
Shell "C:\Program Files\7-Zip\7z.exe e " & b
увы никакие из 3 х вариантов не работают
???????
и ещё нашёл скрипт, я понял, он еще лучше и Зип не надо иметь на компе?? он как библиотека??
Но в скрипте ошибка выскакивает
Почему??? подскажите
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
q = "L:\Изменённые\"
b = "L:\Изменённые\1.rar"
ZipFile = b
ExtractTo = q
Set fso = CreateObject("Scripting.FileSystemObject")
'если нет папки с именем ..., тогда создать такую папку
If Not fso.FolderExists(ExtractTo) Then fso.CreateFolder (ExtractTo)
 
Set objShell = CreateObject("Shell.Application")
Set FilesInZip = objShell.NameSpace(ZipFile).Items 'ошибка !!!!!!метод NameSpace и объект IShellDispatch4 falied
objShell.NameSpace(ExtractTo).CopyHere (FilesInZip)
Set fso = Nothing
Set objShell = Nothing
0
197 / 189 / 15
Регистрация: 09.02.2011
Сообщений: 457
10.02.2011, 20:25
Visual Basic
1
2
3
4
5
6
7
8
9
Dim objAppShell As Object
Dim zipFileName As Variant
Dim unzippedFilePath As Variant
 
b = "c:\2.zip"
q = "C:\1"
 
Set objAppShell = CreateObject("Shell.Application")
objAppShell.Namespace(q).CopyHere objAppShell.Namespace(b).items
А так?
Для ZIP!
0
1711 / 578 / 76
Регистрация: 10.04.2009
Сообщений: 9,298
10.02.2011, 20:45  [ТС]
спасибо работает, но 3 и 4 строки
Visual Basic
1
2
Dim zipFileName As Variant
Dim unzippedFilePath As Variant
как я понял не нужны
так ??
и при перезаписи вылазит окно для действий - заменить, как избавиться от него??
Читал я об этом
опции надо суммировать
т.е чтобы переписывалось без подтверждения ((16)Respond with "Yes to All" for any dialog box that is displayed.) и не появлялось окно ((4)Do not display a progress dialog box.) надо сложить их значения 16+4 = 20 и получаем

Visual Basic
1
objShell.NameSpace(ExtractTo).CopyHere FilesInZip, 20
Как строку переделать??
делаю так:
Visual Basic
1
objAppShell.NameSpace(q).CopyHere objAppShell.NameSpace(b).Items, 20
не получается
0
197 / 189 / 15
Регистрация: 09.02.2011
Сообщений: 457
10.02.2011, 22:35
Со сжатыми файлами не получается...

еще раз попробуйте:
Visual Basic
1
2
b = "c:\1.zip"
Shell "C:\7za.exe e " & b & " -y", vbNormalFocus
должно работать... или киньте скриншот окна с ошибкой.
0
1711 / 578 / 76
Регистрация: 10.04.2009
Сообщений: 9,298
11.02.2011, 16:22  [ТС]
Цитата Сообщение от Bazzy Посмотреть сообщение
Shell "C:\7za.exe e " & b & " -y", vbNormalFocus
как минимум у меня нет на компе файла: C:\7za.exe и этим всё сказано
0
197 / 189 / 15
Регистрация: 09.02.2011
Сообщений: 457
11.02.2011, 17:19
я давал повод хамить?
Думаю у вас на компе и C:\Program Files\7-Zip\7z.exe не было когда-то....

Visual Basic
1
2
3
4
q = "L:\Изменённые\"
b = "L:\Изменённые\1.zip"
 
Shell "C:\Program Files\7-Zip\7z.exe x -aoa -r" & " " & Chr(34) & b & Chr(34) & " -o" & Chr(34) & q & Chr(34) & " " & "*.*"
Если и это не сработает значит вы нахамили кому-то еще и вас прокляли )))
0
1711 / 578 / 76
Регистрация: 10.04.2009
Сообщений: 9,298
11.02.2011, 17:46  [ТС]
Спасибо, работает, намёков на хамство даже не было
0
437 / 144 / 9
Регистрация: 12.01.2009
Сообщений: 678
Записей в блоге: 1
11.02.2011, 20:27
Цитата Сообщение от Ципихович Эндрю Посмотреть сообщение
Я добился того, что ВинРаром распаковываю и Зиповские и Винраровские файлы, можно было остановиться, но хотел уж усвоить как именно Зипом, по ссылкам нашёл и пробую:
не получается, в то же время не увидел пояснения опциям -min -e в Зипе
Подскажите пжл
Всё очень просто. Тот код предназначен для архиватора zip, а не 7zip. Я же вам написал:"Символы e, o +- и т.д. можно найти в описании WinRAR. Они используются тогда, когда вы работаете с Rar через консоль."
Точно такой же принцип и у 7zip. Взгляните на файл помощи 7zip a, который я приложил. Там вам нужно меню "Command Line Version User's Guide"

Цитата Сообщение от Ципихович Эндрю Посмотреть сообщение
[BASIC]
и ещё нашёл скрипт, я понял, он еще лучше и Зип не надо иметь на компе?? он как библиотека??
Но в скрипте ошибка выскакивает
Почему??? подскажите
Укажите, пожалуйста, источник!
Вложения
Тип файла: zip 7-zip.zip (79.5 Кб, 78 просмотров)
0
1711 / 578 / 76
Регистрация: 10.04.2009
Сообщений: 9,298
12.02.2011, 06:08  [ТС]
Цитата Сообщение от analyst Посмотреть сообщение
Укажите, пожалуйста, источник!
Сейчас то зачем указывать, в настоящеее время всё работает, но аппетит растёт во время еды
то есть, как сделать чтобы, прога сама смотрела файл в чём заархивирован, то есть в ЗИПЕ, 7ЗИПЕ, ВИНРАРЕ и распаковывала сама в зависимости от файла, и конечно же желательео тот вариант, где прога на компе не нужна, то есть посредством библиотеки, и этот вопрос решить: как избавиться от окна выбора при наличии уже в папке разархивируемых файлов, то есть работающий скрипт:
Visual Basic
1
2
3
4
5
6
7
8
9
10
'распаковываем из архива файл *.zip вариант без наличия на компьютере 7-Zip
Dim objAppShell As Object
q = "L:\Изменённые\"
b = "L:\Изменённые\1.zip"
Set objAppShell = CreateObject("Shell.Application")
'опции надо суммировать
'то есть чтобы переписывалось без подтверждения ((16)Respond with "Yes to All" for any dialog box that is displayed.)
'и не появлялось окно ((4)Do not display a progress dialog box.)
'надо сложить их значения 16 + 4 = 20 и получаем
objAppShell.NameSpace(q).CopyHere objAppShell.NameSpace(b).Items, 20 'не работает, появляется окно с запросом, как от него избавиться???
доделать
0
197 / 189 / 15
Регистрация: 09.02.2011
Сообщений: 457
12.02.2011, 17:09
Цитата Сообщение от Ципихович Эндрю Посмотреть сообщение
доделать
Этот пример работать не будет... параметр не работает с архивами, окно подтверждения перезаписи будет выскакивать. Как вариант - удалять файлы которые в архиве из папки в которую будете распаковывать или распаковывать во временную папку и этим кодом копировать в папку назначения(спрашивать подтверждения уже не будет)... коду из #12 все равно какой тип архива рар или зип он и так

Цитата Сообщение от Ципихович Эндрю Посмотреть сообщение
распаковывала сама в зависимости от файла
0
1711 / 578 / 76
Регистрация: 10.04.2009
Сообщений: 9,298
12.02.2011, 18:57  [ТС]
Цитата Сообщение от Bazzy Посмотреть сообщение
Как вариант - удалять файлы которые в архиве из папки в которую будете распаковывать
  1. Как узнать файлы которые в архиве, которые я хочу распаковать???
  2. Всё что написано здесь:

    CopyHere(vItem, [ vOptions ])

    vOptions [optional]
    Type: Variant

    Options for the copy operation. This value can be zero or a combination of the following values. These values are based upon flags defined for use with the fFlags member of the C++ SHFILEOPSTRUCT structure. These flags are not defined as such for Visual Basic, VBScript, or JScript, so you must define them yourself or use their numeric equivalents.

    (4)
    Do not display a progress dialog box.
    (8)
    Give the file being operated on a new name in a move, copy, or rename operation if a file with the target name already exists.
    (16)
    Respond with "Yes to All" for any dialog box that is displayed.
    (64)
    Preserve undo information, if possible.
    (128)
    Perform the operation on files only if a wildcard file name (*.*) is specified.
    (256)
    Display a progress dialog box but do not show the file names.
    (512)
    Do not confirm the creation of a new directory if the operation requires one to be created.
    (1024)
    Do not display a user interface if an error occurs.
    (2048)
    Version 4.71. Do not copy the security attributes of the file.
    (4096)
    Only operate in the local directory. Do not operate recursively into subdirectories.
    (8192)
    Version 5.0. Do not copy connected files as a group. Only copy the specified files.

неправда или я его не так использую???
0
197 / 189 / 15
Регистрация: 09.02.2011
Сообщений: 457
14.02.2011, 10:59
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
q = "L:\Изменённые\"
b = "L:\Изменённые\1.zip"
 
Set objShellApp = CreateObject("Shell.Application")
Set objfolder = objShellApp.Namespace((b))
 
arjnamespl = Split(b, "\")
arjname = arjnamespl(UBound(arjnamespl))
 
 
Dim objFile As Object
 
For Each objFile In objfolder.Items()
filepath = objFile.Path
filepathspl = Split(filepath, arjname & "\")
filename = filepathspl(UBound(filepathspl))
If Dir(q & filename) <> "" Then
Kill (q & filename)
objShellApp.Namespace(q).CopyHere objFile, 20
Else
objShellApp.Namespace(q).CopyHere objFile, 20
End If
Next
Будет работать только с ЗИПом, так что не понятно как вам это поможет, если вы хотите чтобы распаковывала другие архивы...
0
1711 / 578 / 76
Регистрация: 10.04.2009
Сообщений: 9,298
14.02.2011, 18:38  [ТС]
спасибо, жалко, что этой 20й так и не смогли воспользоваться:
Visual Basic
1
objShellApp.NameSpace(q).CopyHere objFile ', 20 'разархивируем файл с именем ...
0
197 / 189 / 15
Регистрация: 09.02.2011
Сообщений: 457
14.02.2011, 19:00
Смогли... без этой 20-ки будет прогресбар появляться
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
14.02.2011, 19:00
Помогаю со студенческими работами здесь

Открыть zip архив и распаковать pdf файл с паролем
из zip архива распаковать pdf файл с паролем

Как распаковать архив (rar; zip; 7z)?
как программно распаковать архив? путь куда распаковывать архив находиться в текстовом поле. если в в папке, в которую будет распакован...

Как скачать и распаковать zip-архив
Мне необходимо написать такой php скрипт: по некоторой ссылке надо скачать архив zip, распаковать его в опредленное место, и прочитать...

Как распаковать zip архив в подпапке
Как распаковать zip архив в подпапке директории, т.е. на уровень ниже скрипта

Как программно распаковать архив ZIP
Приветствую всех. :) Возникла необходимость программной распаковки архива zip. Подскажите в каком направлении рыть? Есть такая...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ * Дана цепь постоянного тока с сопротивлениями и напряжениями. Надо найти токи в ветвях. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и решает её. Последовательность действий:. . .
Новый CodeBlocs. Версия 25.03
palva 04.01.2026
Оказывается, недавно вышла новая версия CodeBlocks за номером 25. 03. Когда-то давно я возился с только что вышедшей тогда версией 20. 03. С тех пор я давно снёс всё с компьютера и забыл. Теперь. . .
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение. И на уровне агентов добавится между грибами или бактериями взаимодействий. До того я пробовал подход через многомерные массивы,. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru