Страница 2 из 36

Добавлено: Вс авг 14, 2011 01:24
shveicar
Вот это хороший вариант, а то предыдущий
Рекурсивная распаковка архивов внутри выделенных каталогов
у меня работать не захотел, Батник от Tol!k - работает, отлично. И есть предложение: к данному скрипту
Распаковка выделенных архивов и архивов в структуре
добавить возможность распаковывать winrar om -можно закоментировать строчку, с путем к нему, и если что, будет выбор, чем распаковывать.( при условии, что путь к 7zip конечно, тоже может быть закоментирован). Спасибо.

Добавлено: Вс авг 14, 2011 01:31
Flasher
shveicar писал(а):у меня работать не захотел
У меня работает отлично.
shveicar писал(а):добавить возможность распаковывать winrar om -можно закоментировать строчку, с путем к нему, и если что, будет выбор, чем распаковывать.
Добавлять не буду. Платный. 42 расширения разве мало?

Добавлено: Вс авг 14, 2011 01:44
shveicar
Flasher писал(а):Добавлять не буду. Платный. 42 расширения разве мало?
- да, расширений достаточно, только мне кажется, что 7zip рано или поздно, тоже станет платным. Ну нет, так- нет: хозяин - Барин...

Добавлено: Вс авг 14, 2011 01:56
Flasher
Станет когда-нибудь 7-zip платным (в чём я сомневаюсь) или нет никак не объясняет, почему я должен добавлять уже платный Winrar. Впрочем это легко делается самостоятельно.

Добавлено: Сб апр 21, 2012 02:09
chery123321
чегото не могу разобраться.батник от Tol!k работает,только из дерева папок все архивы паспаковывает в корень, а не в те папки где были архивы.другие коды не работают у меня по малости опыта работы а тоталом. написоно вроде понятно,но знаний не зватает.плиз хелп

Добавлено: Сб апр 21, 2012 10:12
Flasher
chery123321
Перед просьбой о помощи по "не"работающим кодам памятка была прочтена?

Добавлено: Сб апр 21, 2012 10:55
chery123321
Flasher писал(а):chery123321
Перед просьбой о помощи по "не"работающим кодам памятка была прочтена?
я ж говорю что один работает,другой не получилось,это не код виноват а я

Добавлено: Сб апр 21, 2012 11:32
Flasher
chery123321
Если есть желание оказаться на доске "почёта", то можно продолжать вести диалог (и скорее уже монолог) в том же духе.
Если же есть желание получить результат, то отвечаем на конкретно поставленный вопрос.

Добавлено: Пт ноя 07, 2014 01:07
Flasher
Народ, привожу модифицированный код с добавлением важных функций:
  • 1) возможность удаления распакованных архивов;
    2) возможность вытаскивать одиночные элементы без доп. папки;
    3) возможность пропуска, перезаписи и переименования файлов;
    4) автоматический переход к элементу при распаковке одного архива (в т.ч. в структуре).
[cut="RecursiveUnpack.vbs"]

Код: Выделить всё

'••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••
' Распаковка выбранных архивов и/или архивов в структуре выбранных каталогов
' в одноимённые папки рядом с архивами (при наличии в них более одного элемента)
' c автоматическим переходом в случае распаковки одного архива

' Параметры:
' 1. %WL (обязательный)
' 2. <расширения архивов через запятую> ("" - все поддерживаемые)
' 3. <флаг распаковки одиночных элементов без подкаталогов: 1>
' 4. <пропустить/перезаписать существующие/переименовать извлекаемые файлы: s/a/u>
' 5. <флаг удаления распакованных архивов: 1>

' Примеры: %WL | %WL "" 1 | %WL 7z,7zip,arc,bzip2,rar,zip | %WL "" 1 s 1

' Автор - Flasher ©

'••••••••• Путь к утилите 7z.exe •••••••••
Z7 = "%COMMANDER_PATH%\Utils\7-Zip\7z.exe"
'••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••

Set A = WScript.Arguments : C = A.Count
Select Case C : Case 0 Quit : Case 2 Filt = A(1) : End Select
If C > 2 Then One  = A(2) : If C > 3 Then Mode = "-ao" & A(3) : If C > 4 Then Del  = A(4)
List = A(0) : Dim WSH : Set WSH = CreateObject("WScript.Shell")

If InStrRev(WScript.FullName, "WScript.exe") Then
  For Par = 1 To C - 1
    If A(Par) <> "" Then
      Pars = Pars & " " & A(Par)
    ElseIf C - 1 > Par Then Pars = Pars & " """""
    End If 
  Next : WSH.Run "CScript.exe """ & WScript.ScriptFullName & """ " & List & Pars, 0 : Quit
End If

Set Dict = CreateObject("Scripting.Dictionary")
Set FSO  = CreateObject("Scripting.FileSystemObject")
Exts = "zip,7z,7zip,arj,bz2,bzip2,cab,chm,chw,cpio,cramfs,deb,dmg,"&_
"doc,exe,fat,gz,gzip,hfs,hxs,iso,lha,lzma,mbr,msi,ntfs,ppt,rar,"&_
"rpm,scap,squashfs,swm,tar,taz,tbz,tbz2,tgz,vhd,wim,xar,xls,xz"
For Each E in Split(Exts, ",") : Dict.Add E, "" : Next
If Not Len(Filt) Then Filt = Exts

With FSO.OpenTextFile(List,,,-1)
  Do Until .AtEndOfStream
    F = Trim(.ReadLine)
    If F <> "" Then
      If FSO.FolderExists(F) Then ForFolder FSO.GetFolder(F), Ch, It Else ForFile F, Ch, It
    End If
  Loop : .Close
End With : Set Dict = Nothing
If Ch = 1 Then WSH.Exec "%COMMANDER_EXE% /S /O /L=""" & It & "\:"""
If Ch > 1 Then WSH.Popup "Распаковка завершена!", 1.4 , " Результат", 64

Sub ForFolder(Folder, T, F1)
  For Each N In Folder.SubFolders : ForFolder N, Ch, It : Next
  For Each N In Folder.Files      : ForFile   N, Ch, It : Next
End Sub

Sub ForFile(Arch, T, F1)
  For Each Fi in Split(Filt,",")
    If StrComp(Fi, FSO.GetExtensionName(Arch), 1) = 0 And Dict.Exists(LCase(Fi)) Then
      Set Exe = WSH.Exec("%comspec% /c chcp 1251 | """ & Z7 & """ l " &_
      "-slt """ & Arch & """ -sccUTF-8| find ""Path = ""| find /v ""\""")
      Item = Replace(Exe.StdOut.ReadLine, "Path = ", "")
      Sum = 0 : If Item <> "" Then Sum = 1
      If Exe.StdOut.ReadLine <> "" Then Sum  = 2
      If Sum > 0 Then
        BN = FSO.GetBaseName(Arch) : P = FSO.GetParentFolderName(Arch)
        With CreateObject("ADODB.Stream")
          .Type = 2 : .Open : .Charset = "windows-1251" : .WriteText Item
          .Position = 0  : .Charset = "UTF-8" : Item = .ReadText : .Close
        End With : Fd = P & "\" & BN
        If Sum = 1 And (One = "1" Or BN = Item) Then NF = P Else NF = Fd
        F1 = NF & "\" & Item
        WSH.Run """" & Z7 & """ x """ & Arch & """ -o""" &_
                NF & """ " & Mode & " -y -p", 0, True : T = T + 1
        If FSO.FileExists(F1) Then
            If Del = 1 And Sum = 1 Then FSO.DeleteFile Arch, 1
        ElseIf FSO.FolderExists(F1) Then
          If FSO.GetFolder(F1).Size Then
            If Del = 1 And Sum = 1 Then FSO.DeleteFile Arch, 1
          Else FSO.DeleteFolder F1, 1
          End If
        ElseIf FSO.FolderExists(Fd) Then
          If FSO.GetFolder(Fd).Size Then
            If Del = 1 Then FSO.DeleteFile Arch, 1
          Else FSO.DeleteFolder Fd, 1
          End If : F1 = Fd
        End If : Exit For
      End If
    End If
  Next
End Sub : Sub Quit : Set WSH = Nothing : Set FSO = Nothing : WScript.Quit : End Sub
[/cut]

Добавлено: Чт дек 11, 2014 15:31
Flasher
Исправил проблему для архивов с определёнными опциями сжатия. Оптимизировал код (убрал лишнее).

Добавлено: Ср дек 24, 2014 21:54
Iori
Flasher,

Спасибо.
Проверил скрипт. Выдаёт ошибку.

Line 51
Char 4
Error Invalid character
Code 800A0408
Source Microsoft VBScript compilation error.

По-моему вот эта линия:

Код: Выделить всё

If Сh = 1 Then WSH.Exec "%COMMANDER_EXE% /S /O /L=""" & It & "\:"""
[mod="Avada"]Это сообщение и те, что его продолжают, перенесены из темы "Кнопки для 7-Zip".[/mod]

Добавлено: Ср дек 24, 2014 22:01
Flasher
Iori
В некоторых случаях система (причём одна и та же) отказывается воспринимать первый путь без кавычек. Попробуем добавить:
If Ch = 1 Then WSH.Exec """%COMMANDER_EXE%"" /S /O /L=""" & It & "\:"""

Добавлено: Ср дек 24, 2014 22:34
Iori
Flasher

Та же ошибка. :(

Нет моя вина. Прописал 7zG.exe a не 7z.exe.
Ошибки больше нет, но такая же проблемма что и с Толикином батником.

To-есть скорее дело именно в новом 7зипе.
Странно что alpha работала а вот betta нет.

Сделал несколько тестов.
Выходит так: 7-Zip 9.34 и 7-Zip 9.35 не работают правильно через кнопку. 7-Zip 9.30 эта Последняя версия которая работает нормально.

Добавлено: Ср дек 24, 2014 22:41
Flasher
Iori
В данном скрипте нельзя менять 7z.exe. Убедись в том, что файлы 7z.exe и 7z.dll в исходной папке обновлены (в соотв. с этим дистрибутивом).

Добавлено: Ср дек 24, 2014 23:11
Iori
Flasher
Убедись в том, что файлы 7z.exe и 7z.dll в исходной папке обновлены
Проверил, всё обновленно 100%.

А у вас версия 9.35 работает со скриптом?