View previous topic :: View next topic |
Author |
Message |
Старый Ворчун
Joined: 30 Mar 2005 Posts: 13 Location: Северный Кавказ
|
(Separately) Posted: Thu Apr 27, 2006 03:25 Post subject: Пакетное архивирование |
|
|
Подскажите как настроить пакетное архивирование в TC для автоматизированного пополнения архива, если папки для архивирования постоянно пополняются?
То есть есть, скажем, 5 больших папок, в каждой из них по нескольку десятков подпапок, названия и число этих подпапок - величина переменная. Требуется автоматическое создание архивов для каждой из этих подпапок...
В ручном режиме в тотале это можно проделать с помощью опции "Отдельные архивы для каждого выбранного...", а вот как это можно автоматизировать - я никак не соабражу :(
И попутно - второй вопрос: как подключить опцию "Отдельные архивы для каждого выбранного...", чтобы она была включена автоматически при вызове функции архивирования?
! | Avada: | В связи с подъёмом старой темы она переносится в "Автоматизацию". | _________________ Не сердись, всё пройдёт... |
|
Back to top |
|
|
Batya
Joined: 15 Dec 2004 Posts: 2218 Location: Москва, Россия
|
(Separately) Posted: Thu Apr 27, 2006 10:59 Post subject: |
|
|
Старый Ворчун
По первому вопросу...
Я не понял слов по поводу "автоматизированного пополнения архива". Ты хочешь для каждой подпапки создавать отдельный архив? Если - да, то о каком пополнении идет речь?
И что делать, если архив для подпапки уже существует? Заменять его новым или не архивировать, если архив уже есть?
По второму вопросу...
Никак.
Совет - нужно исправить lng-файл коммандера таким образом, чтобы назначить удобную горячую клавишу Alt+{символ} для нужного чекбокса. В данном случае для строки '5492="..."' убери амперсанд (&) внутри строки и добавь его в начало строки с символом какой-нибудь цифры, например - '5492="&6 ..."'. Т.о., когда нажимаешь Alt+F5 для архивирования, не отпуская Alt жми цифру 6, и будет тебе счастье _________________ Нет, я не сплю. Я просто медленно моргаю. |
|
Back to top |
|
|
Старый Ворчун
Joined: 30 Mar 2005 Posts: 13 Location: Северный Кавказ
|
(Separately) Posted: Thu Apr 27, 2006 19:53 Post subject: |
|
|
Непонятно? Попробую пояснить:
есть ряд папок, которые существуют постоянно, в каждой из них по нескольку сотен подпапок, которые и нужно архивировать. У этих подпапок могут меняться названия, меняется их содержание.
Требуется создание архива для каждой из этих подпапок, но так как заранее неизвестно сколько и какие папки будут помещены в архив, то написать как скрипт для пакетного архивирования я не знаю... :cry:
Вся проблема в том, что нельзя поместить в архив всю большую папку целиком, так как размер каждого архивного файла (папка вместе со всеми вложенными подпапками) будет в лучшем случае несколько сотен Мб, а в некоторых случаях - перевалит за Гб! С такими архивами крайне сложно работать, да и переносить их, скажем, на DVD или CD крайне неудобно - бывает надо резать и т.д. Вот и требуется, чтобы автоматически периодически создавались архивы для каждой подпапки...
Если данный архив уже существует, его можно пополнить, если нет - создать заново... В принципе, даже можно каждый раз перезаписывать архивы.
Например, в программе PowerArchiver 9.61.03 есть такая опция - пакетное архивирование, но папки для архивирования надо указывать вручную каждый раз...
Такой скрипт я пробовал писать в WinRarе, но он иногда глючит - некоторые архивы потом не читаются...
Я понятно объяснил? :lol: _________________ Не сердись, всё пройдёт... |
|
Back to top |
|
|
Batya
Joined: 15 Dec 2004 Posts: 2218 Location: Москва, Россия
|
(Separately) Posted: Fri Apr 28, 2006 11:01 Post subject: |
|
|
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 надо что-то делать ).
Если что-то работает не совсем так, как ты хочешь, пиши - поправлю скрипт. |
|
Back to top |
|
|
Старый Ворчун
Joined: 30 Mar 2005 Posts: 13 Location: Северный Кавказ
|
(Separately) Posted: Fri Apr 28, 2006 15:50 Post subject: |
|
|
Спасибо оромнейшее!
Буду разбираться и пробовать!.. _________________ Не сердись, всё пройдёт... |
|
Back to top |
|
|
shveicar
Joined: 18 Apr 2011 Posts: 277 Location: Россия Москва
|
(Separately) Posted: Tue Jun 28, 2011 20:21 Post subject: |
|
|
Здравствуйте Batya - а можно изменить скрипт так, чтобы он был бы, с такими параметрами (желательно изменяемыми)
например: 1 выбор типа архива( rar, zip, ну если возможно sfx)
2 выбор степени сжатия
3 добавление 5% на восстановление
4 возможность создания пароля(естественно одинакового, для всех упакованных за один раз архивов)
5 возможность выбора имени(полное имя файла или полное имя файла с датой- год, месяц, день на конце)
6 ну и возможность выбора директории создания - текущая панель, противоположная панель.
То есть, алгоритм действий- выделяем группу файлов, нажимаем кнопку(с настраиваемыми параметрами) и получаем группу архивов - в нужной директории с полными именами файлов плюс если возможно с датой на конце(по выбору). Заранее благодарен. |
|
Back to top |
|
|
shveicar
Joined: 18 Apr 2011 Posts: 277 Location: Россия Москва
|
(Separately) Posted: Sun Jul 24, 2011 16:01 Post subject: |
|
|
Добрый День. С предыдущей просьбой, как я понял, все слишком сложно. Но подскажите хотя-бы, что изменить в приведенном скрипте , чтобы он архивировал не вложенные папки в выделенных каталогах, а файлы(в данном случае видео с расширениями .wmv, mov, mp4, avi ну если есть возможность изменять параметры- расширения, архивируемых файлов будет просто здорово), вложенные в выделенные каталоги. Спасибо. |
|
Back to top |
|
|
Flasher
Joined: 06 Nov 2009 Posts: 14229 Location: Москва
|
(Separately) Posted: Thu Aug 04, 2011 13:55 Post subject: |
|
|
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 |
|
|
shveicar
Joined: 18 Apr 2011 Posts: 277 Location: Россия Москва
|
(Separately) Posted: Fri Aug 05, 2011 02:53 Post subject: |
|
|
Flasher -Огромное спасибо -за заботу, буду тестировать! |
|
Back to top |
|
|
shveicar
Joined: 18 Apr 2011 Posts: 277 Location: Россия Москва
|
(Separately) Posted: Fri Aug 05, 2011 14:37 Post subject: |
|
|
Добрый день. Проверил скрипт, и вот что получается- если при архивировании (в данном случае пользовался win rar) выделены папки, с вложенными в них файлами - то скрипт срабатывает как положено (проверил варианты с "%T" и "%P") если использовать те-же параметры, но архивировать, только файлы(предварительно команда- DirBranch или поиск-отобразить всё) то скрипт не работает. В моем случае интересно- если можно архивировать много файлов вложенных в папки и желательно чтобы создаваемые архивы помещались в ту же папку, где находится исходный (архивируемый файл) ну и параметр "%Т" на всякий случай пусть тоже останется. Спасибо. |
|
Back to top |
|
|
Flasher
Joined: 06 Nov 2009 Posts: 14229 Location: Москва
|
(Separately) Posted: Fri Aug 05, 2011 15:04 Post subject: |
|
|
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 |
|
|
shveicar
Joined: 18 Apr 2011 Posts: 277 Location: Россия Москва
|
(Separately) Posted: Fri Aug 05, 2011 15:22 Post subject: |
|
|
Flasher wrote: | Со всеми форматами кроме rar должно работать. С rar, увы, придётся смириться | Странно, а почему в скрипте от Batya rar работает? |
|
Back to top |
|
|
Flasher
Joined: 06 Nov 2009 Posts: 14229 Location: Москва
|
(Separately) Posted: Fri Aug 05, 2011 15:33 Post subject: |
|
|
Где? Скрипт Batya не пакует выделенные файлы. |
|
Back to top |
|
|
shveicar
Joined: 18 Apr 2011 Posts: 277 Location: Россия Москва
|
(Separately) Posted: Fri Aug 05, 2011 15:54 Post subject: |
|
|
Так, если бы он паковал выделенные файлы, то и вопросов бы не было.
Но, он ведь пакует выделенные папки с вложенными файлами и помещает архивы туда-же, где и исходники, я думал, что можно запаковать просто вложенные файлы. Или может-быть есть возможность использовать вариант, массового удаления из архивов лишних папок, чтобы остались запакованными только файлы? (что-то вроде перепаковки), хотя наверно это слишком сложно. Просто с 7zip не получается портабельности архиватора (плагины 7zip требуют установки обычного 7 zip), а портабельный win rar прекрасно работает. |
|
Back to top |
|
|
Flasher
Joined: 06 Nov 2009 Posts: 14229 Location: Москва
|
(Separately) Posted: Fri Aug 05, 2011 16:10 Post subject: |
|
|
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 |
|
|
|
|
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
|