Реархивация
Select messages from
# through # FAQ
[/[Print]\]
Goto page 1, 2, 3, 4, 5  Next  :| |:
Total Commander -> Автоматизация Total Commander

#1: Реархивация Author: Dimsok PostPosted: Fri Aug 07, 2015 21:07
    —
Кто-нибудь покажите пример кнопки, которая должна будет осуществлять 3 действия:разархивирование упакованных файлов, архивирование их с максимально-возможным сжатием, удаление распахованных файлов. Любыми средствами, хотя подозреваю, что на бат опять будет проблема с уникодными именами. Для zip или rar. Чтобы упаковка происходила с сохранением структуры упакованных файлов и папок, в противоположную панель с именем исходного архива

#2:  Author: FlasherLocation: Москва PostPosted: Sun Aug 09, 2015 11:14
    —
Зачем чего-то распаковывать, если в WinRAR есть преобразование? Галок наставил, сохранил, потом с параметрами cv -y и маской отработал (-r рекурсивно).

#3:  Author: Dimsok PostPosted: Mon Aug 10, 2015 13:11
    —
А как можно сконвертировать rar и zip в 7z? Лучше ужимается им. Желательно одной кнопочкой

#4:  Author: FlasherLocation: Москва PostPosted: Mon Aug 10, 2015 14:33
    —
В данном случае никак. Тут есть только rar5 как более ёмкий.
По поводу лучше вопрос спорный. Это далеко не WinRK/PAQ8 и даже не nanozip.

#5:  Author: Dimsok PostPosted: Mon Aug 10, 2015 15:31
    —
Ну можно ж батник какой-нибудь написать, чтоб разархивировал рары, а потом через 7-zip переархивировал. Нашёл какой-то готовый в сети, только он не очень работает. А программа PeaZip тоже непонятно как работает

#6:  Author: Dimsok PostPosted: Thu Jan 19, 2017 15:49
    —
Пользуюсь такой кнопкой:

Code:
TOTALCMD#BAR#DATA
%ComSpec% /c for /f "delims=" %# in
('type %WF') do "c:\Program Files\7-Zip\7z.exe" x "%%#" -o%%tmp%%\Rearch && "c:\Program Files\7-Zip\7z.exe" a -mx=9 "%T%%~n#.7z" %%tmp%%\Rearch\* && rd /s /q %%tmp%%\Rearch
%COMMANDER_PATH%\Totalcmd.exe,8
Rearchivate files to 7z

1
-1


По завершении использую скрипт для переноса времени модификации со старого архива на новый.
Flasher, можно автоматизировать скриптом эти две задачи?

#7:  Author: FlasherLocation: Москва PostPosted: Thu Jan 19, 2017 21:28
    —
Пробуй:
Code:
'•••••••••••••••••••••••••• VBS •••••••••••••••••••••••••••
' Назначение: Преобразование типов выбранных архивов
'             с сохранением даты модификации в новых

' Условие: Наличие инсталляции системного аддона TC4Shell
' Страница загрузки: http://www.tc4shell.com/ru/download/

' Параметры: %WL "<путь назначения>" <новое расширение>
' Необязат.: "<параметры упаковки>" <удалять исходники: 1>

' Примеры: %WL "%P" 7z "-mx9 -m0=LZMA2:fb273 -m1=LZMA2:lc4"
'          %WL "%T" zip "-mx9 -mm=Deflate -mfb=258 -mcu=on"
'          %WL "%P" exe "-sfx7z.sfx -mx9" 1
'••••••••••••••••••••••••••••••••••••••••••••••••••••••••••
Option Explicit: Dim C, Par, Del, List, Trg, ExtN, FSO, ShA
'••••••••••••••••• Путь к утилите 7z.exe ••••••••••••••••••
Const Z7 = """%COMMANDER_PATH%\Utils\7-zip\7z.exe"""
'••••••••••••••••••••••••••••••••••••• Автор: Flasher © •••

Const Title = "  Преобразование типов выбранных архивов      "
With WSH.Arguments : C = .Count : Par = " -sdel"
 Select Case True : Case C = 0 WSH.Quit
   Case C < 3 MsgBox " Укажите хотя бы 3 параметра!", 4144, Title : WSH.Quit
   Case C > 3 Par = .Item(3) & Par: If C = 5 Then Del = .Item(4)
 End Select : List = .Item(0) : Trg = .Item(1) : ExtN = .Item(2)
End With : Dim Exts: Exts = " 7Z  | 7ZIP | EXE | GZ2 | GZIP2 | SWM | WIM "&_
"| ZIPX " & vbCr & " ZIP | ODS | TAR | JAR | DOCX | ODT | XLSX | XPI | EPUB"
If InStr(Exts & " ", " " & Ucase(ExtN) & " ") = 0 Then _
MsgBox "Указанное расширение """ & ExtN & """ не поддерживается!" &_
vbCr & vbCr & "Список поддерживаемых расширений:" &_
vbCr & Exts, 4144, Title : WSH.Quit
Dim WSS, Reg, Tmp, Temp, F, Ext, Arch, Items, NN, NA
Set FSO = CreateObject("Scripting.FileSystemObject")
Set ShA = CreateObject("Shell.Application")
Set WSS = CreateObject("WScript.Shell")
Set Reg = New Regexp : Dim OS, PassW, Enc, EnCrypt, T, P : OS = WSS._
RegRead("HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\CurrentVersion")
Reg.IgnoreCase = True: Reg.Pattern = "^(001|7z(|ip)|a|apm|arj?|bz(|ip)2|" &_
"cab|cpio|ch[iqmw]|cramfs|deb|dmg|docx?|e(sd|pub|xe|xt[234]?)|fat|gz(|ip" &_
")|hfsx?|hx[sirqw]|ihex|img|iso|jar|li[bt]|l(zh|ma)|lha|mbr|ms(i|lz|sp)|" &_
"mub|n(si|tf)s|od[st]|qcow(|2c?)|r00|rar|rpm|pkg|ppmd|ppt|squashfs|scap|" &_
"swm|t[agx]z|tar|tbz2?|u(d|efi)f|vdi|vhd|vmdk|wim|x(ar|lsx?|pi|z)|z|zipx?)$"
Tmp  = ShA.NameSpace(WSS.Environment("Process")("TEMP")).Self.Path & "\"
Temp = Tmp & FSO.GetBaseName(FSO.GetTempName) : FSO.CreateFolder Temp

With FSO.OpenTextFile(List,,,-1)
  Do : F = .ReadLine : Ext = FSO.GetExtensionName(F)
    If FSO.FileExists(F) And Ext <> ExtN And Reg.Test(Ext) Then
      Set Arch = ShA.NameSpace(F)
      If Arch.Self.IsFolder Then
        Set Items = Arch.Items : Items.Filter 73952, "*" : PassW = Chr(0)
        NN = FSO.GetBaseName(F) & "." & ExtN : NA = FSO.BuildPath(Trg, NN)
        Enc = Len(Arch.Self.ExtendedProperty("System.IsEncrypted"))
        If Enc And InStr("|7z|7zip|gz|gzip|", "|" & Ext & "|") Then _
        EnCrypt = " -mhe" Else EnCrypt = ""
        If Not FSO.FileExists(NA) And (Items.Count Or Enc) Then
          If OS <= "5.1" Or Enc Then T = 8192 Else T = (_
          CLng(Items.Item(0).ExtendedProperty("System.SFGAOFlags"))And 8192)
          If T = 8192 Then GetPass F, Passw, "", Enc Else _
          WSS.Run Z7 & " x """ & F  & """ -o""" & Temp & """ -y -p", 0, True
         If PassW <> "" Then
          P = Par: If PassW <> Chr(0) Then P = Par & " -p" & PassW & EnCrypt
          WSS.Run Z7 & " a """ & NA & """ """  & Temp & "\*"" " & P, 0, True
          If FSO.FileExists(NA) Then ShA.NameSpace(Trg).ParseName(NN)._
          ModifyDate = FSO.GetFile(Arch.Self.Path).DateLastModified  :_
          C = 0 : If Del = 1 Then FSO.DeleteFile F, 1
         End If
        End If
      End If
    End If
  Loop Until .AtEndOfStream : .Close
End With : FSO.DeleteFolder Temp : If C = 0 Then C = 24 : NA = "Выполнено!"_
Else C = 12 : NA = "Нет подходящих архивов!"
If FSO.FolderExists(Tmp & "TC4Shell") Then FSO.DeleteFolder Tmp & "TC4Shell"
WSS.Popup Space(C) & NA, 5, Title, 4160

Sub GetPass(Arc, P, Text, Num)
  If OS > "5.1" Or Num Or P <> Chr(0) Then _
  P = InputBox(vbCr & "Архив:  """ & Arc & """" & vbCr & vbCr &_
      Text & vbCr & vbCr & "Введите пароль:", "     " & Title, P)
  If P <> Chr(0) Then Text = Space(40) & "Пароль неверен!"
  If Len(P) Then _
  WSS.Run Z7 & " x """ & Arc & """ -o""" & Temp & """ -y -p" & P, 0, True :_
  If FSO.GetFolder(Temp).Size = 0 Then GetPass Arc, P, Text, 1
End Sub


Last edited by Flasher on Wed Jan 25, 2017 20:26; edited 23 times in total

#8:  Author: Dimsok PostPosted: Thu Jan 19, 2017 22:08
    —
Как сделать упаковку в противоположную панель?

Можно, чтобы папки в упакованном архиве имели оригинальную дату? С кнопкой так получается.

А что, с LZMA2 ты замечал разницу? Я сравнивал, хоть бы на килобайт чем-то отличалось.

#9:  Author: FlasherLocation: Москва PostPosted: Fri Jan 20, 2017 09:52
    —
См. параметры и проверяй.

Если бы не замечал, то не писал бы об этом в примечании.
Попробуй на текстовых, например.

Add: Слегка оптимизировал.

#10:  Author: Dimsok PostPosted: Fri Jan 20, 2017 16:11
    —
Всё выполняется, но в конце появляется ошибка:
Line:60
Char:37
Error:Path not found

Добавлено спустя 3 минуты:

%WL "%T" 7z "-mx=9"

Добавлено спустя 9 минут:

Те же параметры но с "1" архив-источник не удаляет.

Добавлено спустя 8 минут:

И ещё c архивами 7z не работает.

#11:  Author: FlasherLocation: Москва PostPosted: Fri Jan 20, 2017 16:34
    —
Dimsok wrote:
Char:37
У тебя точно последняя редакция?
Dimsok wrote:
Те же параметры но с "1" архив-источник не удаляет.
А, сперва другой метод был, кое-что забыл учесть. Исправлю после того, как с первым багом разберёмся.
Dimsok wrote:
И ещё c архивами 7z не работает.
В смысле? Я в большей степени на них и тестировал.

#12:  Author: Dimsok PostPosted: Fri Jan 20, 2017 16:44
    —
С последней Line 60 Char 2

C 7z тут пишет "нет подходящих архивов".

#13:  Author: FlasherLocation: Москва PostPosted: Fri Jan 20, 2017 16:54
    —
Dimsok wrote:
С последней Line 60 Char 2
Похоже на XP папка TC4Shell в %Temp% не появляется. Поменяем.
Dimsok wrote:
C 7z тут пишет "нет подходящих архивов".
Если тип архива совпадает или паковать по сути нечего (внутри архивов пусто или объекты-нулёвки), то выдаст такое сообщение.

#14:  Author: Dimsok PostPosted: Fri Jan 20, 2017 16:56
    —
Ну не знаю, с кнопкой этот же 7z пакует. А понял, ты убрал возможность паковать в то же расширение, чтобы не было конфликтов при упаковке в ту же панель? Хотя иногда имеет смысл паковать в тот же самый архив с большим сжатием.
И как добавить новое расширение? Дописал CAB после WIM, но видно этого мало.

#15:  Author: FlasherLocation: Москва PostPosted: Fri Jan 20, 2017 16:59
    —
Dimsok wrote:
Ну не знаю, с кнопкой этот же 7z пакует.
А чего тут знать? Зачем мне из таких же архивов получать точно такие же? Это глупо для скрипта преобразования.
Dimsok wrote:
Дописал CAB после WIM, но видно этого мало.
Это ещё зачем?



Total Commander -> Автоматизация Total Commander


output generated using printer-friendly topic mod. All times are GMT + 4 Hours

Goto page 1, 2, 3, 4, 5  Next  :| |:
Page 1 of 5

Powered by phpBB © 2001, 2005 phpBB Group