Добавлено: Вт янв 27, 2015 13:09
Flasher
Не планируется ли обновление скрипта с учетом упаковки _files?
Не планируется ли обновление скрипта с учетом упаковки _files?
Форум поддержки пользователей Total Commander
https://forum.wincmd.ru/
Код: Выделить всё
'••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••
' Опциональная упаковка выбранных файлов или файлов в структуре
' выбранных каталогов (htm(l) упаковываются вместе со своими каталогами)
' Параметры (! - обязательный):
' 1. <путь к списку элементов в Юникоде> (!)
' 2. "<путь назначения>\" (!)
' а) если добавить в конец точку, то все файлы - в один архив;
' б) если написать точку, то файлы каждой папки - в одноименный архив;
' в) если написать "", то - рядом с исходником;
' г) если написать "имя папки", то - в папку рядом с исходником;
' имя папки должно быть уникальным для выбранной структуры.
' 3. <расширение архива> (!)
' 4. *.<ext1>;*.<ext2>;*.<ext3> (маски расширений файлов)
' 5. <параметры упаковки>
' Примеры:
' 1) %WL "" zip
' 2) %WL "%P" RAR
' 3) "C:\My Files\List.txt" 1 exe "" -sfx7z.sfx
' 4) %WL . 7z "" -mx9 -m0=LZMA2:fb273 -m1=LZMA2:lc4
' 5) %WL "" rar "" -m5 -s -rr5p -pPASSWORD -ag_DD.MM.YY
' 6) %WL "%T" ZIP "" -mx9 -mm=Deflate -mfb=258 -mcu=on -pSECRET
' 7) %WL "%T." 7Z *.mht;*.htm;*.html -mx9 -m0=LZMA2 -ssw -pПАРОЛЬ
' Автор - Flasher ©
'••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••
Option Explicit
Dim SZIP, RAR, Title, A, C, P, Ext, List, Filt, Arch, Exts, E,_
i, S, WSH, ShA, FSO, F, T, Text, Folder, Test, Items, Fl, Fd,_
File, Extn, FF, Ex, Path, PP, Name, l, PostFix, Pr, Param
'••••••••• Путь к утилите 7z.exe ••••••••••••
SZIP = "%COMMANDER_PATH%\Utils\7-Zip\7z.exe"
'••••••••• Путь к утилите rar.exe •••••••••••
RAR = "%COMMANDER_PATH%\Plugins\arc\rar.exe"
'••••••••••••••••••••••••••••••••••••••••••••
Title = "Рекурсивная пофайловая упаковка"
Set A = WScript.Arguments
C = A.Count : If C = 0 Then WScript.Quit
List = A.Item(0) : P = A.Item(1) : Ext = A.Item(2)
If C > 3 Then Filt = A.Item(3)
If Len(List) > 0 And A.Count < 3 Then
MsgBox "Не выполнено условие:" & vbLf & "минимальное число параметров - 3",_
vbExclamation, " " & Title : Wscript.Quit
End If
Exts = "7Z | 7ZIP | ZIP | RAR | GZIP | BZIP2 | XZ | EXE | WIM"
If InStr(" " & Exts & " ", " " & Ucase(Ext) & " ") = 0 Then
MsgBox "Указанное расширение """ & UCase(Ext) & """ не поддерживается!" &_
vbLf & vbLf & "Список поддерживаемых расширений:" &_
vbLf & Exts, 48, Space(20) & Title : WScript.Quit
End If
If C > 5 Then For i = 5 To C - 1 : S = S & " " & A(i) : Next End If
If InStr(P, ":") And Right(P, 1) = "." Then
Arch = Trim(InputBox(String(5, vbLf) & "Введите базовое имя архива:",_
Space(18) & Title, "Новый_архив")) : If Arch = "" Then WScript.Quit
P = Left(P, Len(P) - 1)
End If
Set WSH = CreateObject("WScript.Shell")
Set ShA = CreateObject("Shell.Application")
Set FSO = CreateObject("Scripting.FileSystemObject")
With FSO.OpenTextFile(List,,,-1)
Do : F = Trim(.ReadLine)
If F > vbNullString Then
If FSO.FolderExists(F) Then ForFolder F, T Else ForFile F, T
End If
Loop Until .AtEndOfStream : .Close
End With
Sub Info(Text) : WSH.Popup Text, 1.5 , " " & Title, 64 : End Sub
If T Then Info "Упаковка завершена!" Else Info "Нет подходящих объектов!"
Sub ForFolder(Folder, Test)
Set Folder = ShA.NameSpace(Folder)
Set Items = Folder.Items
Items.Filter 192, Filt : If Items.Count Then Test = 1
For Each Fl in Items : Run Fl.Path, FSO.GetExtensionName(Fl) : Next
Items.Filter 160, "*"
For Each Fd In Items
If Right(Fd, 6) <> "_files" Then ForFolder Fd.Path, Test
Next
End Sub
Sub ForFile(File, Test)
Extn = FSO.GetExtensionName(File)
If Len(Filt) Then
If Not Ubound(Filter(Split(LCase(Filt), ";"), "*." &_
LCase(Extn), True, 1)) Then Run File, Extn : Test = 1 End If
Else Run File, Extn : Test = 1
End If
End Sub
Sub Run(FF, Ex)
If InStr(P, ":") Then
Path = P
Else
PP = FSO.GetParentFolderName(FF) & "\"
If P <> "." And P <> "" Then PP = PP & P & "\"
If FSO.FolderExists(PP) Then Path = PP Else Path = FSO.CreateFolder(PP) & "\"
End If
If Len(Arch) Then
Name = Arch & "." & Ext
ElseIf P = "." Then
Name = FSO.GetFileName(Left(PP, Len(PP) - 1)) & "." & Ext
Else
Name = FSO.GetBaseName(FF) & "." & Ext
l = 0 : Const M = 1
Do While FSO.FileExists(Path & Name)
l = l + 1
If l < 10^M Then PostFix = Right(String(M, "0") & l, M) Else PostFix = l
Name = FSO.GetFileName(FF) & " (" & PostFix & ")." & Ext
Loop
End if
If LCase(Ex) = "htm" Or LCase(Ex) = "html" Then FF = """" & FF & """ """ &_
Left(FF, InStrRev(FF, Ex) - 2) & "_files""" Else FF = """" & FF & """"
If LCase(Ext) <> "rar" Then
Pr = SZIP : Param = "a """ & Path & Name & """ " & FF & S
Else
Pr = RAR : Param = "a -ep1" & S & " ""\\?\" & Path & Name & """ " & FF
End If : WSH.Run """" & Pr & """ " & Param, 0, True
End Sub


Тут ничего не поделаешь. 300? Ограничение API до 259 символов.Nick писал(а):если путь где-то более 300 символов

[/cut]Первый скриншот.Skif_off писал(а):Прошу прощения, не совсем понял, где проблемы с длиной пути?
Как и rar. Но там про другое.Skif_off писал(а):7-zip 9.30 и выше с ним точно работают
Это можно проверить по дате последней правки поста. К посту доступ возможен в течение месяца с момента публикации. Не знал?Skif_off писал(а):Или речь об этом скрипте?
В смысле?Nick писал(а):Вроде бы с длинными путями стало более стабильно.
Приведённое окно перестало появляться?
Неверная запись. Отмеченных кавычек не должно быть.Nick писал(а):параметры %WL . rar "" *.mht;*.htm;*.html
Не вижу в этом смысла. Для обновления есть ключ -u, если что. А в 7-zip он имеет куда более гибкий функционал.Nick писал(а):лучше, чтобы не перезаписывался html файл (после каких-либо изменений), а добавлялся бы по номеру
Да, пока не наблюдаю его.Flasher писал(а):Приведённое окно перестало появляться?
Это удобно когда есть много версий файлов html, при замене они все потеряются, а иногда бывает, что нужно откатиться на более старую версию. При архивировании отдельных html файлов, будут копии, это удобно, сохраняться все версии.Flasher писал(а):Не вижу в этом смысла

Видимо, не в тех же условиях тесты проводятся. Нужно со структурой проверять.Nick писал(а):Да, пока не наблюдаю его.
С трудом себе представляю, когда кто-то плодит у себя версии html-страниц. И в любом случае я не считаю, что за переделки внутри архива должен отвечать скрипт. Этим должен заниматься архиватор. А архиватор, увы, может переименовывать только уже имеющиеся файлы, а не те, что добавляются в архив. Да и включать дополнительный листинг файлов внутри скрипта дело муторное с учётом различной глубины вложенности, это всяко будет на скорости негативно сказываться.Nick писал(а):Это удобно когда есть много версий файлов html, при замене они все потеряются, а иногда бывает, что нужно откатиться на более старую версию. При архивировании отдельных html файлов, будут копии, это удобно, сохраняться все версии.
