Страница 5 из 7

Добавлено: Вт янв 27, 2015 13:09
Nick
Flasher
Не планируется ли обновление скрипта с учетом упаковки _files?

Добавлено: Вт янв 27, 2015 22:18
Flasher
[cut="Планируется:"]

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

'•••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••• 
' Опциональная упаковка выбранных файлов или файлов в структуре 
' выбранных каталогов (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
[/cut]

Добавлено: Чт янв 29, 2015 16:37
Nick
Flasher
При параметрах %WL "" rar *.mht;*.htm;*.html получаю ошибку:
---------------------------
Строка: 105
Символ: 4
Ошибка: Недопустимое число аргументов или присвоение значения свойства
---------------------------

Добавлено: Чт янв 29, 2015 16:59
Flasher
Nick, см. добавку в 56 строке.

Добавлено: Вт фев 03, 2015 15:04
Nick
Flasher

Изображение
Иногда бывают проблемы с длинными именами (т.е. бывает иногда, что не работает, если путь где-то более 300 символов).

Изображение
Если упаковывать несколько раз подряд (например, после правки html файла), то будет неправильная нумерация файлов.

Также хотелось бы еще добавить опцию, чтобы внутри одной папки все страницы упаковывались в один архив, т.е., например:
"Новая папка 1\Файлы html"
"Новая папка 1\Новая папка 2\Файлы html"
Чтобы внутри этих папок ("Новая папка 1" и "Новая папка 2") было бы по одному архиву со страницами.

Добавлено: Вт фев 03, 2015 18:02
Flasher
Nick писал(а):если путь где-то более 300 символов
Тут ничего не поделаешь. 300? Ограничение API до 259 символов.
Остальное сделал.

[cut="P.S.:"]И как я должен воспринимать отмалчивания в разных ветках после публикаций решений?Изображение
Я не сервисная обслуга обладателей лицензии ТС, а такой же форумчанин, как и все. Изображение[/cut]

Добавлено: Вт фев 03, 2015 18:57
Skif_off
Прошу прощения, не совсем понял, где проблемы с длиной пути? Здесь используется %WL и UNC-пути, по крайней мере отчётливо вижу префикс \\?\, 7-zip 9.30 и выше с ним точно работают (хотя на WinXP не все программы с префиксом нормально работают).
Или речь об этом скрипте?

Добавлено: Вт фев 03, 2015 19:04
Flasher
Skif_off писал(а):Прошу прощения, не совсем понял, где проблемы с длиной пути?
Первый скриншот.
Skif_off писал(а):7-zip 9.30 и выше с ним точно работают
Как и rar. Но там про другое.
Skif_off писал(а):Или речь об этом скрипте?
Это можно проверить по дате последней правки поста. К посту доступ возможен в течение месяца с момента публикации. Не знал?

Добавлено: Вт фев 03, 2015 23:41
Skif_off
Flasher
Понял, где зарылась собака, только теперь не совсем понятно: как уживаются FSO.FolderExists(F) и префикс UNC-путей? MAX_PATH в VBScript уже отменили?

Добавлено: Ср фев 04, 2015 09:48
Flasher
Skif_off
Им там и не приходится уживаться. А что значит "уже отменили"? Во встроенных компонентах его там и не было.

Добавлено: Ср фев 04, 2015 19:11
Nick
Flasher
Просто не каждый день бываю за компьютером и на форуме... Да и на тестирование тоже уходит определенное время. :wink:

Вроде бы с длинными путями стало более стабильно.
Когда пакуются файлы внтури одной папки в единый архив (параметры %WL . rar "" *.mht;*.htm;*.html), то лучше, чтобы не перезаписывался html файл (после каких-либо изменений), а добавлялся бы по номеру, т.е. также как и при упаковке файлов html по отдельным архивам (если, допустим, нужна будет перезапись, то ее можно сделать с помощью параметра архиватора -o+).

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

[cut=""Просто не каждый день бываю за компьютером и на форуме... Да и на тестирование тоже уходит определенное время.""]Не будем лукавить, его уходит значительно меньше, чем на процесс создания скрипта или добавку ряда опций. И выдавить из себя слово благодарности, доложив при этом о результатах (только один из примеров), ИМО, не должно являться какой-то непреодолимой проблемой.[/cut]

Добавлено: Чт фев 05, 2015 17:05
Nick
Flasher писал(а):Приведённое окно перестало появляться?
Да, пока не наблюдаю его.
Flasher писал(а):Не вижу в этом смысла
Это удобно когда есть много версий файлов html, при замене они все потеряются, а иногда бывает, что нужно откатиться на более старую версию. При архивировании отдельных html файлов, будут копии, это удобно, сохраняться все версии.

Но, кода очень много таких файлов в одной папке, то для экономии места, все архивируется в единый архив. Поэтому хорошо, если бы добавлялось в единый архив также, как и в случае с отдельными файлами (тем более, при необходимости перезаписи можно использовать ключ -o+ или параметры a -u). При таком варианте старые версии файлов не потеряются. Это особенно важно, если такие вещи проделывать на большом множестве папок с длинными путями.
[cut="Прочее"]За скрипты, конечно большое спасибо. Этот скрипт пока не проверял на большом множестве файлов. Думаю, что может быть полезен и другим, кому приходится иметь дело не только с архивацией, но и перемещением страниц (как пример при перемещении их на USB flash-накопитель). Да и занимаемое место может значительно уменьшиться.
Изображение
Таких окон обычно больше десятка, поэтому бывает, что, что-то могу проследить или вообще еще не успеть посмотреть, что и получилось со скриптом по ссылке. Или вообще бывает, что сессию в браузере приходится заменять...[/cut]

[mod="Avada"]Синтаксис тегов для спойлеров желательно проверять на предпросмотре. И не забывать ставить кавычки.[/mod]

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

Avada
Просто, не успел еще исправить, увидел, когда уже отправил сообщение, а уже Вы написали... (на разных форумах разный синтаксис, а теги вставляю, часто вручную. Да и не все теги бывают прописаны... :wink:

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

[cut="Прочее"]Ну, может, благодарность ещё в ЛС переместим или вообще мне на мыло отправим, чего уж там в спойлер прятать? Изображение
Полезность - вещь сугубо индивидуальная. Экономия на текстовых файлах давно неактуальная задача. У меня одна из флешек - 240 Гб. Кого мне там экономить? Поэтому безотносительно местами надуманной общественной полезности нужно не забывать, что запрос актуален прежде всего для вопрошающего, за ним и ответка.

Вкладки же имеет смысл держать при изучении информации. Для всего остального достаточно подфорума или главной страницы, где можно всё проследить и увидеть. И никто не мешает использовать расширения для оптимизации работы с ушками.[/cut]

Добавлено: Вт апр 21, 2015 18:28
Nick
Поскольку в этой теме никто не отвечает, то, напишу здесь.
Что надо изменить в этом скрипте, чтобы в названии архива также присутствовало и расширение оригинального файла?