Total Commander Forum Index Total Commander
Форум поддержки пользователей Total Commander
Сайты: Все о Total Commander | Totalcmd.net | Ghisler.com | RU.TCKB
 
 RulesRules   SearchSearch   FAQFAQ   MemberlistMemberlist   UsergroupsUsergroups   RegisterRegister 
 ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 

Пакетное архивирование
Goto page 1, 2, 3, 4, 5  Next
 
Post new topic   Reply to topic    Total Commander Forum Index -> Автоматизация Total Commander printer-friendly view
View previous topic :: View next topic  
Author Message
Старый Ворчун



Joined: 30 Mar 2005
Posts: 13
Location: Северный Кавказ

Post (Separately) Posted: Thu Apr 27, 2006 03:25    Post subject: Пакетное архивирование Reply with quote

Подскажите как настроить пакетное архивирование в TC для автоматизированного пополнения архива, если папки для архивирования постоянно пополняются?
То есть есть, скажем, 5 больших папок, в каждой из них по нескольку десятков подпапок, названия и число этих подпапок - величина переменная. Требуется автоматическое создание архивов для каждой из этих подпапок...
В ручном режиме в тотале это можно проделать с помощью опции "Отдельные архивы для каждого выбранного...", а вот как это можно автоматизировать - я никак не соабражу :(

И попутно - второй вопрос: как подключить опцию "Отдельные архивы для каждого выбранного...", чтобы она была включена автоматически при вызове функции архивирования?

 !  Avada:
В связи с подъёмом старой темы она переносится в "Автоматизацию".

_________________
Не сердись, всё пройдёт...
Back to top
View user's profile Send private message
Batya



Joined: 15 Dec 2004
Posts: 2218
Location: Москва, Россия

Post (Separately) Posted: Thu Apr 27, 2006 10:59    Post subject: Reply with quote

Старый Ворчун
По первому вопросу...
Я не понял слов по поводу "автоматизированного пополнения архива". Ты хочешь для каждой подпапки создавать отдельный архив? Если - да, то о каком пополнении идет речь?
И что делать, если архив для подпапки уже существует? Заменять его новым или не архивировать, если архив уже есть?

По второму вопросу...
Никак.
Совет - нужно исправить lng-файл коммандера таким образом, чтобы назначить удобную горячую клавишу Alt+{символ} для нужного чекбокса. В данном случае для строки '5492="..."' убери амперсанд (&) внутри строки и добавь его в начало строки с символом какой-нибудь цифры, например - '5492="&6 ..."'. Т.о., когда нажимаешь Alt+F5 для архивирования, не отпуская Alt жми цифру 6, и будет тебе счастье Smile
_________________
Нет, я не сплю. Я просто медленно моргаю.
Back to top
View user's profile Send private message
Старый Ворчун



Joined: 30 Mar 2005
Posts: 13
Location: Северный Кавказ

Post (Separately) Posted: Thu Apr 27, 2006 19:53    Post subject: Reply with quote

Непонятно? Попробую пояснить:
есть ряд папок, которые существуют постоянно, в каждой из них по нескольку сотен подпапок, которые и нужно архивировать. У этих подпапок могут меняться названия, меняется их содержание.
Требуется создание архива для каждой из этих подпапок, но так как заранее неизвестно сколько и какие папки будут помещены в архив, то написать как скрипт для пакетного архивирования я не знаю... :cry:
Вся проблема в том, что нельзя поместить в архив всю большую папку целиком, так как размер каждого архивного файла (папка вместе со всеми вложенными подпапками) будет в лучшем случае несколько сотен Мб, а в некоторых случаях - перевалит за Гб! С такими архивами крайне сложно работать, да и переносить их, скажем, на DVD или CD крайне неудобно - бывает надо резать и т.д. Вот и требуется, чтобы автоматически периодически создавались архивы для каждой подпапки...
Если данный архив уже существует, его можно пополнить, если нет - создать заново... В принципе, даже можно каждый раз перезаписывать архивы.

Например, в программе PowerArchiver 9.61.03 есть такая опция - пакетное архивирование, но папки для архивирования надо указывать вручную каждый раз...
Такой скрипт я пробовал писать в WinRarе, но он иногда глючит - некоторые архивы потом не читаются...

Я понятно объяснил? :lol:
_________________
Не сердись, всё пройдёт...
Back to top
View user's profile Send private message
Batya



Joined: 15 Dec 2004
Posts: 2218
Location: Москва, Россия

Post (Separately) Posted: Fri Apr 28, 2006 11:01    Post subject: Reply with quote

Code:
'==========================================================================
' Создание отдельных архивов для каждой вложенной папки в выделенных папках

' В параметрах вызова из TC должно быть прописано:
' %L
'==========================================================================

Dim FSO, WS, FoldList, Fold, Fold1, WinRar, Command, Command1, Command2, ArchKeys, FullArchName
Set FSO      = CreateObject("Scripting.FileSystemObject")
Set WS       = CreateObject("WScript.Shell")
Set FoldList = FSO.OpenTextFile(WScript.Arguments(0), 1)

WinRar   = "D:\Program Files\WinRAR\WinRAR.exe"  ' Путь к WinRAR.exe
Command1 = " A"                                  ' "Добавить файлы в архив"
Command2 = " U"                                  ' "Обновить файлы в архиве"
ArchKeys = " -r -ep1 -ibck"                      ' Ключи:
                                                 '   "Рекурсивно с вложенными папками"
                                                 '   "Исключить из пути базовую папку"
                                                 '   "Запустить WinRAR как фоновый процесс в системном лотке"
Do While Not FoldList.AtEndOfStream
  FoldPath = FoldList.ReadLine
  Set Fold = FSO.GetFolder(FoldPath)
  For Each Fold1 in Fold.SubFolders
    FullArchName = FoldPath & Fold1.Name & ".rar"
    If Not FSO.FileExists(FullArchName) Then
      Command = Command1
    Else
      Command = Command2
    End If
    WS.run """" & WinRar & """" & Command & ArchKeys & " """ & FullArchName & """ """ & Fold1.Path & "\""", , True
  Next
Loop

Set FSO      = Nothing
Set WS       = Nothing
Set Fold     = Nothing
Set Fold1    = Nothing
Set FoldList = Nothing
WScript.Quit

Сохрани код в файл *.vbs. Повесь этот файл на кнопку. В параметрах кнопки напиши %L. Скрипт архивирует WinRar-ом, поэтому в скрипте поправь путь к WinRar на свой.
Скрипт работает по отмеченным "большим" папкам (всё ж таки этот форум про TC, поэтому в TC надо что-то делать Wink ).
Если что-то работает не совсем так, как ты хочешь, пиши - поправлю скрипт.
Back to top
View user's profile Send private message
Старый Ворчун



Joined: 30 Mar 2005
Posts: 13
Location: Северный Кавказ

Post (Separately) Posted: Fri Apr 28, 2006 15:50    Post subject: Reply with quote

Спасибо оромнейшее!
Буду разбираться и пробовать!..
_________________
Не сердись, всё пройдёт...
Back to top
View user's profile Send private message
shveicar



Joined: 18 Apr 2011
Posts: 277
Location: Россия Москва

Post (Separately) Posted: Tue Jun 28, 2011 20:21    Post subject: Reply with quote

Здравствуйте Batya - а можно изменить скрипт так, чтобы он был бы, с такими параметрами (желательно изменяемыми)
например:
    1 выбор типа архива( rar, zip, ну если возможно sfx)
    2 выбор степени сжатия
    3 добавление 5% на восстановление
    4 возможность создания пароля(естественно одинакового, для всех упакованных за один раз архивов)
    5 возможность выбора имени(полное имя файла или полное имя файла с датой- год, месяц, день на конце)
    6 ну и возможность выбора директории создания - текущая панель, противоположная панель.

То есть, алгоритм действий- выделяем группу файлов, нажимаем кнопку(с настраиваемыми параметрами) и получаем группу архивов - в нужной директории с полными именами файлов плюс если возможно с датой на конце(по выбору). Заранее благодарен.
Back to top
View user's profile Send private message
shveicar



Joined: 18 Apr 2011
Posts: 277
Location: Россия Москва

Post (Separately) Posted: Sun Jul 24, 2011 16:01    Post subject: Reply with quote

Добрый День. С предыдущей просьбой, как я понял, все слишком сложно. Но подскажите хотя-бы, что изменить в приведенном скрипте , чтобы он архивировал не вложенные папки в выделенных каталогах, а файлы(в данном случае видео с расширениями .wmv, mov, mp4, avi ну если есть возможность изменять параметры- расширения, архивируемых файлов будет просто здорово), вложенные в выделенные каталоги. Спасибо.
Back to top
View user's profile Send private message
Flasher



Joined: 06 Nov 2009
Posts: 14229
Location: Москва

Post (Separately) Posted: Thu Aug 04, 2011 13:55    Post subject: Reply with quote

shveicar, пляши!

Code:
'••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••
' Упаковать каждый файл или содержимое каждой папки в отдельный архив

' Параметры (! - обязательный):
'  1. <путь к списку элементов> (!)
'  2. "<путь назначения>\" (!)
'  3. <расширение архива> (!)
'  4. <фильтр-список расширений файлов в корнях выделенных папок>
'     разделитель - запятая (если задействован 5., то - !)
'  5. <параметры упаковки>

' Примеры:
'  1) %WL "%T" zip
'  2) %WL "%T" RAR
'  3) %WL "%P" exe "" -sfx7zCon.sfx
'  4) %WL "%P" rar "" -m5 -s -rr5p -pPASSWORD -ag_DD.MM.YY
'  5) %WL "%T" ZIP "" -mx9 -mm=Deflate -mfb=258 -mcu=on -pSECRET
'  6) %WL "%T" 7Z txt,doc,bat,cmd, -mx9 -m0=LZMA2 -ssw -pПАРОЛЬ

' Автор - Flasher ©
'••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••
' Установка и проверка параметров:
With WScript.Arguments
  On Error Resume Next
  List = .Item(0) : Path = .Item(1) : Ext  = .Item(2)
  If Err.Number > 0 Then
    MsgBox  "Не выбраны элементы для упаковки!", 48, Space(25) & "Пакетная упаковка"
    Wscript.Quit
  End If : On Error GoTo 0
  L = vbnewline : C = .Count : If C > 3 Then Filt = .Item(3)
  If Len(List) > 0 And .Count < 3 Then
    MsgBox  "Не выполнено условие:" & L & "минимальное число параметров - 3",_
    vbExclamation, Space(23) & "Пакетная упаковка"
    Wscript.Quit
  End If
  If C > 5 Then
    For i = 5 to C - 1 : S = S & " " & .Item(i) : Next
  End If
End With : Const M = 1
' Проверка поддержки указанного расширения архива:
Exts = "7Z | 7ZIP | ZIP | RAR | GZIP | BZIP2 | XZ | EXE | WIM"
If InStr(Exts, Ucase(Ext)) = 0 Then
  MsgBox "Указанное расширение """ & UCase(Ext) & """ не поддерживается!" & L &_
  L & "Список поддерживаемых расширений:" & L & Exts, 48,_
  Space(38) & "Пакетная упаковка" : WScript.Quit
End If
' Объявление объектов и переменных с путями к утилитам:
Set FSO = CreateObject("Scripting.FileSystemObject")
Dim WSH : Set WSH = CreateObject("WScript.Shell")
SZIP = "%COMMANDER_PATH%\Utils\7-Zip\7z.exe"
RAR  = "%COMMANDER_PATH%\Plugins\arc\rar.exe"
' Построение цикла для упаковки массива элементов:
For Each F in Split(FSO.GetFile(List).OpenAsTextStream(1, -1).ReadAll, L)
  If F > vbNullString Then
    If FSO.FileExists(F) Then
      If Len(Filt) > 0 Then
        Ext1 = LCase(FSO.GetExtensionName(F))
        If Ext1 <> "" Then
          If InStr(LCase(Filt), Ext1 & ",") > 0 Then Filtr F, SZIP, RAR, Ext, Path, S
        End If
      Else Filtr F, SZIP, RAR, Ext, Path, S
      End If
    Else
      Name = FSO.GetFileName(F) & "." & Ext : Str = ""
      If LCase(Ext) <> "rar" Then
        If Len(Filt) > 0 Then
          For Each E in Split(Filt, ",") : Str = Str & " """ & F & """*." & LCase(E) : Next
        Else Str = " """ & F & """*"
        End If
        WSH.Run """" & SZIP & """ a """ & Path & Name & """ """ & F & """*\" & Str & S, 0, True
      Else
        Set PF = FSO.GetFolder(F)
        For Each FF in PF.SubFolders : Period Str, FF, RAR, S, Path, Name : Next
        For Each FF in PF.Files
          If Len(Filt) > 0 Then
            Ext1 = LCase(FSO.GetExtensionName(FF))
            If Ext1 <> "" Then
              If InStr(LCase(Filt), Ext1 & ",") > 0 Then Period Str, FF, RAR, S, Path, Name
            End If
          Else Period Str, FF, RAR, S, Path, Name
          End If
        Next : If Str <> "" Then WSH.Run """" & RAR & """ a -ep1 -ri15" & S & " """ & Path & Name & """" & Str, 0, True
      End If
    End IF
  End If
Next
' Вывод сообщения и выход:
WSH.Popup "Упаковка завершена!", 1.4, "Результат", 64
Set FSO = Nothing : Set WSH = Nothing : WScript.Quit

' Процедура упаковки файлов:
Sub Filtr(FN, SZ, RA, Ex, P, K)
  Nm = FSO.GetBaseName(FN) & "." & Ex : Name = Nm : l = 0
  Do While FSO.FileExists(P & Name)
    l = l + 1 : If l < 10^M Then PostFix = Right(String(M, "0") & l, M) Else PostFix = l
    Name = Nm & " (" & PostFix & ")." & Ext
  Loop
  If LCase(Ex) <> "rar" Then
    Pr = SZ : Param = "a """ & P & Name & """ """ & FN & """" & K
  Else
    Pr = RA : Param = "a -ep1" & K & " """ & P & Name & """ """ & FN & """"
  End If : WSH.Run """" & Pr & """ " & Param, 0, True
End Sub
' Процедура упаковки папок в RAR по частям, исходя из ограничения длины комстроки:
Sub Period(St, FP, RR, K, Dir, NF)
  St = St & " """ & FP & """"
  If Len(St) > 1900 Then
    WSH.Run """" & RR & """ a -ep1 -ri15" & K & " """ & Dir & NF & """" & St, 0, True
    St = ""
  End If
End Sub

Пути к 7z.exe и rar.exe в переменных SZIP и RAR указать свои.


Last edited by Flasher on Fri Sep 07, 2018 19:01; edited 8 times in total
Back to top
View user's profile Send private message
shveicar



Joined: 18 Apr 2011
Posts: 277
Location: Россия Москва

Post (Separately) Posted: Fri Aug 05, 2011 02:53    Post subject: Reply with quote

Flasher -Огромное спасибо -за заботу, буду тестировать!
Back to top
View user's profile Send private message
shveicar



Joined: 18 Apr 2011
Posts: 277
Location: Россия Москва

Post (Separately) Posted: Fri Aug 05, 2011 14:37    Post subject: Reply with quote

Добрый день. Проверил скрипт, и вот что получается- если при архивировании (в данном случае пользовался win rar) выделены папки, с вложенными в них файлами - то скрипт срабатывает как положено (проверил варианты с "%T" и "%P") если использовать те-же параметры, но архивировать, только файлы(предварительно команда- DirBranch или поиск-отобразить всё) то скрипт не работает. В моем случае интересно- если можно архивировать много файлов вложенных в папки и желательно чтобы создаваемые архивы помещались в ту же папку, где находится исходный (архивируемый файл) ну и параметр "%Т" на всякий случай пусть тоже останется. Спасибо.
Back to top
View user's profile Send private message
Flasher



Joined: 06 Nov 2009
Posts: 14229
Location: Москва

Post (Separately) Posted: Fri Aug 05, 2011 15:04    Post subject: Reply with quote

shveicar wrote:
только файлы(DirBranch или поиск-отобразить всё) то скрипт не работает
Со всеми форматами кроме rar должно работать. С rar, увы, придётся смириться.
shveicar wrote:
В моем случае интересно- если можно архивировать много файлов вложенных в папки и желательно чтобы создаваемые архивы помещались в ту же папку, где находится исходный (архивируемый файл)
Очень кривой подход - мешать архивы с упаковываемыми файлами, ИМХО. Надо поменять Path на PF & "\" в последних двух связках Path & Name.

Last edited by Flasher on Fri Aug 05, 2011 17:38; edited 1 time in total
Back to top
View user's profile Send private message
shveicar



Joined: 18 Apr 2011
Posts: 277
Location: Россия Москва

Post (Separately) Posted: Fri Aug 05, 2011 15:22    Post subject: Reply with quote

Flasher wrote:
Со всеми форматами кроме rar должно работать. С rar, увы, придётся смириться
Странно, а почему в скрипте от Batya rar работает?
Back to top
View user's profile Send private message
Flasher



Joined: 06 Nov 2009
Posts: 14229
Location: Москва

Post (Separately) Posted: Fri Aug 05, 2011 15:33    Post subject: Reply with quote

Где? Скрипт Batya не пакует выделенные файлы.
Back to top
View user's profile Send private message
shveicar



Joined: 18 Apr 2011
Posts: 277
Location: Россия Москва

Post (Separately) Posted: Fri Aug 05, 2011 15:54    Post subject: Reply with quote

Так, если бы он паковал выделенные файлы, то и вопросов бы не было.
Но, он ведь пакует выделенные папки с вложенными файлами и помещает архивы туда-же, где и исходники, я думал, что можно запаковать просто вложенные файлы. Или может-быть есть возможность использовать вариант, массового удаления из архивов лишних папок, чтобы остались запакованными только файлы? (что-то вроде перепаковки), хотя наверно это слишком сложно. Просто с 7zip не получается портабельности архиватора (плагины 7zip требуют установки обычного 7 zip), а портабельный win rar прекрасно работает.
Back to top
View user's profile Send private message
Flasher



Joined: 06 Nov 2009
Posts: 14229
Location: Москва

Post (Separately) Posted: Fri Aug 05, 2011 16:10    Post subject: Reply with quote

shveicar wrote:
Так, если бы он паковал выделенные файлы, то и вопросов бы не было.
Но, он ведь пакует выделенные папки с вложенными файлами и помещает архивы туда-же, где и исходники
См. контекст "цитата + ответ", что на что отвечено. Поэтому я не понял, к чему пример скрипта Batya.
shveicar wrote:
Или может-быть есть возможность использовать вариант, массового удаления из архивов лишних папок, чтобы остались запакованными только файлы?
Зачем удалять, если можно паковать только файлы?:
Quote:
For Each FF in PF.SubFolders
Str = Str & " """ & FF & """"
Next
If Len(Filt) > 0 Then Str = ""
Можно удалить кусок полностью или добавить кр. строку на случай, когда требуется упаковывать только файлы из корней папок при указании фильтра.
shveicar wrote:
Просто с 7zip не получается портабельности архиватора (плагины 7zip требуют установки обычного 7 zip), а портабельный win rar прекрасно работает.
А то, что WinRar платный - ничего? Установка для 7zip - это всего лишь распаковка аналогичная WinRAR. Достаточно в соотв. подпапку TC скинуть файлы dll, sfx, 7z.exe - и будет портабельный вариант. Я скрипт под портабельность и затачивал (трудно не заметить переменные окружения...).
Back to top
View user's profile Send private message
Display posts from previous:   
Post new topic   Reply to topic    Total Commander Forum Index -> Автоматизация Total Commander All times are GMT + 4 Hours
Goto page 1, 2, 3, 4, 5  Next
Page 1 of 5

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum


Powered by phpBB © 2001, 2005 phpBB Group