View previous topic :: View next topic |
Author |
Message |
Cobblestone-TLT
Joined: 01 Feb 2014 Posts: 34
|
(Separately) Posted: Sun Feb 02, 2014 21:40 Post subject: |
|
|
Flasher
Что WinRAR будет создавать пустые папки я понял, это не страшно. Если организовать проверку скриптом размера папки сразу после распаковки не представляется возможным (и если он = 0 байт удалять её), что ж, буду делать это вручную (alt+shift+enter, упорядочить по размеру и т.д.). Что с висом и окном вопрос решаем - это уже хорошо. А как быть с поспешным удалением архивов из которых эти пустые папки получились? |
|
Back to top |
|
 |
Flasher

Joined: 06 Nov 2009 Posts: 14229 Location: Москва
|
(Separately) Posted: Sun Feb 02, 2014 21:54 Post subject: |
|
|
Code: | TOTALCMD#BAR#DATA
%ComSpec% /c for /f "delims=" %i in
('type %WL') do "%%COMMANDER_PATH%%\Utils\WinRAR\WinRAR.exe" x "%%i" -ibck -p- -inul "%P%%~ni\" && del "%%i"
wcmicons.dll,31
Распаковать выбранные архивы c помощью WinRAR и удалить их при положительном результате
1 |
Cobblestone-TLT wrote: | Если организовать проверку скриптом размера папки сразу после распаковки не представляется возможным | Да возможно, только в кнопку не уложится, нужен пакетный файл либо скрипт. _________________ Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой.
Last edited by Flasher on Mon Feb 03, 2014 00:10; edited 1 time in total |
|
Back to top |
|
 |
Cobblestone-TLT
Joined: 01 Feb 2014 Posts: 34
|
(Separately) Posted: Sun Feb 02, 2014 22:49 Post subject: |
|
|
Flasher
Так и пусть будет скрипт, батник. Изначальный вариант как раз и есть связка (кнопка запускает батник, со скриптом в параметрах). Задачи уместить все это в кнопке и не ставится)
Posted after 6 minutes:
к слову о предложенной кнопке: я так понимаю раз нигде в параметрах нет ссылок ни на батник ни на скрипт, предполагается что она работает автономно (только укажи путь к WinRAR'у)? Так вот у меня результат почему-то - удаленные архивы и... ничего более! Или я как-то не правильно истолковал предложенный пример? |
|
Back to top |
|
 |
Flasher

Joined: 06 Nov 2009 Posts: 14229 Location: Москва
|
(Separately) Posted: Sun Feb 02, 2014 22:57 Post subject: |
|
|
Cobblestone-TLT
Да, кнопка работает автономно, иначе бы не писал об ограничениях. Скорее ошибка в пути к WinRAR (например, % не сдвоен).
А скрипт таков:
Code: | '======================================================
' Распаковать выбранные архивы в одноимённые папки
' с удалением распакованных архивов
' Параметры: %WL "<путь получателя>"
' Пример: %WL "%P"
'=================== Путь к WinRAR ====================
WinRAR = """%COMMANDER_PATH%\Utils\WinRAR\WinRAR.exe"""
'======================================================
With WScript.Arguments
If .Count = 0 Then WScript.Quit
List = .Item(0) : Path = .Item(1)
End With : If Right(Path, 1) <> "\" Then Path = Path & "\"
Set FSO = CreateObject("Scripting.FileSystemObject")
Dim WSH : Set WSH = CreateObject("WScript.Shell")
Set Dict = CreateObject("Scripting.Dictionary")
For Each Ext in Split("ZIP RAR RAR5 7Z 7ZIP ACE ARJ BZ2 CAB GZ ISO JAR LZH TAR UUE")
Dict.Add Ext, ""
Next
For Each F in Split(FSO.GetFile(List).OpenAsTextStream(1,-1).ReadAll, vbNewLine)
If F <> "" And Dict.Exists(UCase(FSO.GetExtensionName(F))) Then
BN = Path & FSO.GetBaseName(F)
WSH.Run WinRAR & " x " & F & " -ibck -p- -inul """ & BN & "\""", 0, True
If FSO.FolderExists(BN) Then
If FSO.GetFolder(BN).Size = 0 Then FSO.DeleteFolder BN, 1 Else FSO.DeleteFile F, 1
End If
End If
Next : Set FSO = Nothing : Set WSH = Nothing : Set Dict = Nothing : WScript.Quit |
_________________ Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой.
Last edited by Flasher on Tue Feb 04, 2014 00:42; edited 6 times in total |
|
Back to top |
|
 |
Cobblestone-TLT
Joined: 01 Feb 2014 Posts: 34
|
(Separately) Posted: Sun Feb 02, 2014 23:19 Post subject: |
|
|
Flasher
В предпоследнем варианте, действительно пропустил один "%")
Что касается последнего, поведение такое - пустые папки от запароленного архива удаляются вместе с архивом, нешифрованные архивы распакуются как надо, но и сами архивы не удаляются.
Для полного счасться не хватает того, чтобы сами эти проблеммные архивы не удалялись вместе с пустой папкой, а не проблемные наоборот - удалялись. Возможно я не представляю масштаба сложности поставленной задачи, но на словах все формулируется (по моему сугубо личному мнению разумеется ) предельно просто: если размер папки на выходе = 0 - удалить её и оставить архив, если > 0 - наоборот (оставить папку и удалить архив).
Я не програмист, но что мне подсказывает что вот эта строка:
Code: |
If FSO.GetFolder(BN).Size = 0 Then
FSO.DeleteFolder BN, 1 : FSO.DeleteFile F, 1
|
На "человеческом" языке звучит как:
"если размер папки = 0, то
удалить папку, удалить файл"
Возможно ли переписать проверку условия таким образом, чтобы это звучало так:
"если размер папки = 0, то
удалить папку;
иначе
удалить файл"
Простите, если изъясняюсь по-делитантски, просто я не программист и разбираюсь сейчас во всех этих кодах опираясь на знания, полученные еще в школе на уроках информатики  |
|
Back to top |
|
 |
Flasher

Joined: 06 Nov 2009 Posts: 14229 Location: Москва
|
(Separately) Posted: Sun Feb 02, 2014 23:23 Post subject: |
|
|
Cobblestone-TLT wrote: | пустые папки от запароленного архива удаляются вместе с архивом, нешифрованные архивы распакуются как надо, но и сами архивы не удаляются. | Так это не моя затея: Cobblestone-TLT wrote: | А как быть с поспешным удалением архивов из которых эти пустые папки получились? |
Cobblestone-TLT wrote: | сами эти проблеммные архивы не удалялись вместе с пустой папкой, а не проблемные наоборот - удалялись | См. выше.
Что пишем, то и получаем. Сделал под обратные условия. _________________ Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой. |
|
Back to top |
|
 |
Cobblestone-TLT
Joined: 01 Feb 2014 Posts: 34
|
(Separately) Posted: Sun Feb 02, 2014 23:28 Post subject: |
|
|
Выдает ошибку на строке 26, символ 4 |
|
Back to top |
|
 |
Flasher

Joined: 06 Nov 2009 Posts: 14229 Location: Москва
|
(Separately) Posted: Sun Feb 02, 2014 23:30 Post subject: |
|
|
Упс. End If лишний не убрал. Сделано.
P.S. Также обращаю внимание, что файлы с неподдерживаемыми расширениями будут игнорироваться (можно смело выделять случайные). _________________ Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой. |
|
Back to top |
|
 |
Cobblestone-TLT
Joined: 01 Feb 2014 Posts: 34
|
(Separately) Posted: Sun Feb 02, 2014 23:32 Post subject: |
|
|
Первым делом решил, что дело в этом, пробовал убрать сам Теперь ошибки не выдает, но и результата никакого. Я имею в виду совсем никакого - все архивы на месте, папок не создается. |
|
Back to top |
|
 |
Flasher

Joined: 06 Nov 2009 Posts: 14229 Location: Москва
|
(Separately) Posted: Sun Feb 02, 2014 23:35 Post subject: |
|
|
Cobblestone-TLT
Опять с путём WinRAR накосячено?
Либо выделяются только запароленные архивы.
+ Забыл ZIP-ы прописать (уже добавил). Не они? _________________ Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой. |
|
Back to top |
|
 |
Cobblestone-TLT
Joined: 01 Feb 2014 Posts: 34
|
(Separately) Posted: Sun Feb 02, 2014 23:38 Post subject: |
|
|
Для проверки создано 3 архива:
1-no_pass
2-pass
3-no_pass2
Путь к рару вставляю копипастом (перепроверил правильность трижды). Вы у себя на живом примере тоже проверяли, все работает? (просто допускаю возможность, что "пишите музыку по нотам, а не на слух" )
p.s. за фильтр по расширениям спасибо - штука нужная, теперь не обязательно "отсеивать" архивы от сопровождающих файлов описаний и прочих заметок
Posted after 2 minutes:
Они родимые! Они!!!
Спасибо огромное! Премного благодарен! То, что нужно. Отрабатывает на УРА! |
|
Back to top |
|
 |
Flasher

Joined: 06 Nov 2009 Posts: 14229 Location: Москва
|
(Separately) Posted: Mon Feb 03, 2014 00:11 Post subject: |
|
|
Хорошо. Пож-та.
Если потребуется, могу потом и этот скрипт допились, у 7-zip всяко форматов больше.
P.S.: Кнопку тоже поправил. _________________ Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой. |
|
Back to top |
|
 |
Cobblestone-TLT
Joined: 01 Feb 2014 Posts: 34
|
(Separately) Posted: Mon Feb 03, 2014 08:57 Post subject: |
|
|
Flasher
Во вложенных каталогах распаковка мне лично пока не требуется, достаточно обработки списка выделенных архивов, но если переделаете имеющийся в этой теме скрипт для работы с 7zip вместо WinRAR (ввиду его бОльшей "всеядности") без изменения функционала - будет приятно
Пока вроде с "экзотическими" форматами дел иметь не приходится, но мало ли как оно обернется в будущем, а чем универсальней используемый инструмент - тем, по моему, лучше
p.s. острой необходимости пока нет, но за темой слежу, если появится время и желание переделать - с радостью заберу исправленный вариант. А пока и на том огромное спасибо! |
|
Back to top |
|
 |
Flasher

Joined: 06 Nov 2009 Posts: 14229 Location: Москва
|
(Separately) Posted: Mon Feb 03, 2014 20:54 Post subject: |
|
|
Cobblestone-TLT
Может, кто-то хочет с WinRAR работать. Оставлю и тот вариант.
 Decompress_selected_archives.vbs Code: | '=========================================================
' Распаковка выбранных архивов в одноимённые папки
' с возможностью удаления правильно распакованных архивов
' Параметры: %WL "<путь получателя>" <флаг удаления: 1>
' Пример: %WL "%P" 1
'====================== Путь к 7-zip =====================
Z7 = """%COMMANDER_PATH%\Utils\7-Zip\7z.exe"""
'=========================================================
With WScript.Arguments
C = .Count : If .Count = 0 Then WScript.Quit
List = .Item(0) : Path = .Item(1) : If C = 3 Then Del = .Item(2)
End With : If Right(Path, 1) <> "\" Then Path = Path & "\"
Dim WSH : Set WSH = CreateObject("WScript.Shell")
Set FSO = CreateObject("Scripting.FileSystemObject")
Const M = 0 : Set Dict = CreateObject("Scripting.Dictionary")
Exts = "zip 7z 7zip arj bz2 bzip2 cab chm chw cpio cramfs deb dmg doc" &_
" exe fat gz gzip hfs hxs iso lha lzma mbr msi ntfs ppt rar rpm scap " &_
"squashfs swm tar taz tbz tbz2 tgz vhd wim xar xls xz"
For Each Ext in Split(Exts) : Dict.Add Ext, "" : Next
For Each F in Split(FSO.GetFile(List).OpenAsTextStream(1,-1).ReadAll, vbNewLine)
If F <> "" And Dict.Exists(LCase(FSO.GetExtensionName(F))) Then
BN = Path & FSO.GetBaseName(F) : NN = BN : n = 0
Do While FSO.FolderExists(NN)
n = n + 1
If n < 10^M Then PFix = Right(String(M, "0") & n, M) Else PFix = n
NN = BN & " (" & PFix & ")"
Loop : WSH.Run Z7 & " x """ & F & """ -o""" & NN & "\"" -y -p", 0, True
If FSO.FolderExists(NN) Then
If FSO.GetFolder(NN).Size Then
If Del = 1 Then FSO.DeleteFile F, 1
Else FSO.DeleteFolder NN, 1
End If
End If
End If
Next : Set FSO = Nothing : Set WSH = Nothing : Set Dict = Nothing : WScript.Quit |
В этот скрипт ещё добавил автосмену потенциального имени папки, если папка с тем же именем уже существует. _________________ Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой.
Last edited by Flasher on Sun Feb 09, 2014 12:25; edited 3 times in total |
|
Back to top |
|
 |
Cobblestone-TLT
Joined: 01 Feb 2014 Posts: 34
|
(Separately) Posted: Mon Feb 03, 2014 22:11 Post subject: |
|
|
Flasher
Решил протестировать предложенный вариант и обнаружил следущее, скрипт(7-Zip) удаляет запароленные архивы, оставляя вместо них папку с файлами-пустышками. Кроме того попробовал еще раз на тех же архивах скрипт(WinRAR), так вот он на созданном мной для теста архиве с паролем выдает сообщение об ошибке в строке 24, символ 6 (Путь не найден). Не пойму в чем дело, вчера вроде с подобным же архивом работал как надо
Если допилите 7-Zip чтобы не удалял нераспакованные архивы потестирую более тщательно.
p.s. проблемный архив "zip", создан встроенным архиватором TC8.5RC2, обычным способом распаковывается прекрасно, при обработке скриптом - ошибка.
p.p.s. создал из тех же файлов с тем же паролем rar архив WinRAR'ом - скрипт отрабатывает как надо, если аналогичный архив создать WinRAR'ом в формате - та же ошибка возвращается.
Posted after 2 minutes:
Создал еще несколько архивов с произвольным содержимым - все шифрованные архивы zip почему-то вызывают указанную ошибку  |
|
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
|