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 Previous  1, 2, 3, 4  Next
 
Post new topic   Reply to topic    Total Commander Forum Index -> Автоматизация Total Commander printer-friendly view
View previous topic :: View next topic  
Author Message
Cobblestone-TLT



Joined: 01 Feb 2014
Posts: 34

Post (Separately) Posted: Sun Feb 02, 2014 21:40    Post subject: Reply with quote

Flasher
Что WinRAR будет создавать пустые папки я понял, это не страшно. Если организовать проверку скриптом размера папки сразу после распаковки не представляется возможным (и если он = 0 байт удалять её), что ж, буду делать это вручную (alt+shift+enter, упорядочить по размеру и т.д.). Что с висом и окном вопрос решаем - это уже хорошо. А как быть с поспешным удалением архивов из которых эти пустые папки получились?
Back to top
View user's profile Send private message
Flasher



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

Post (Separately) Posted: Sun Feb 02, 2014 21:54    Post subject: Reply with quote

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
View user's profile Send private message
Cobblestone-TLT



Joined: 01 Feb 2014
Posts: 34

Post (Separately) Posted: Sun Feb 02, 2014 22:49    Post subject: Reply with quote

Flasher
Так и пусть будет скрипт, батник. Изначальный вариант как раз и есть связка (кнопка запускает батник, со скриптом в параметрах). Задачи уместить все это в кнопке и не ставится)

Posted after 6 minutes:

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



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

Post (Separately) Posted: Sun Feb 02, 2014 22:57    Post subject: Reply with quote

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
View user's profile Send private message
Cobblestone-TLT



Joined: 01 Feb 2014
Posts: 34

Post (Separately) Posted: Sun Feb 02, 2014 23:19    Post subject: Reply with quote

Flasher
В предпоследнем варианте, действительно пропустил один "%")
Что касается последнего, поведение такое - пустые папки от запароленного архива удаляются вместе с архивом, нешифрованные архивы распакуются как надо, но и сами архивы не удаляются.

Для полного счасться не хватает того, чтобы сами эти проблеммные архивы не удалялись вместе с пустой папкой, а не проблемные наоборот - удалялись. Возможно я не представляю масштаба сложности поставленной задачи, но на словах все формулируется (по моему сугубо личному мнению разумеется Smile ) предельно просто: если размер папки на выходе = 0 - удалить её и оставить архив, если > 0 - наоборот (оставить папку и удалить архив).

Я не програмист, но что мне подсказывает что вот эта строка:
Code:

If FSO.GetFolder(BN).Size = 0 Then
       FSO.DeleteFolder BN, 1 : FSO.DeleteFile F, 1

На "человеческом" языке звучит как:
"если размер папки = 0, то
удалить папку, удалить файл"
Возможно ли переписать проверку условия таким образом, чтобы это звучало так:
"если размер папки = 0, то
удалить папку;
иначе
удалить файл"

Простите, если изъясняюсь по-делитантски, просто я не программист и разбираюсь сейчас во всех этих кодах опираясь на знания, полученные еще в школе на уроках информатики Smile
Back to top
View user's profile Send private message
Flasher



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

Post (Separately) Posted: Sun Feb 02, 2014 23:23    Post subject: Reply with quote

Cobblestone-TLT wrote:
пустые папки от запароленного архива удаляются вместе с архивом, нешифрованные архивы распакуются как надо, но и сами архивы не удаляются.
Так это не моя затея:
Cobblestone-TLT wrote:
А как быть с поспешным удалением архивов из которых эти пустые папки получились?

Cobblestone-TLT wrote:
сами эти проблеммные архивы не удалялись вместе с пустой папкой, а не проблемные наоборот - удалялись
См. выше.

Что пишем, то и получаем. Сделал под обратные условия.
_________________
Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой.
Back to top
View user's profile Send private message
Cobblestone-TLT



Joined: 01 Feb 2014
Posts: 34

Post (Separately) Posted: Sun Feb 02, 2014 23:28    Post subject: Reply with quote

Выдает ошибку на строке 26, символ 4
Back to top
View user's profile Send private message
Flasher



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

Post (Separately) Posted: Sun Feb 02, 2014 23:30    Post subject: Reply with quote

Упс. End If лишний не убрал. Сделано.

P.S. Также обращаю внимание, что файлы с неподдерживаемыми расширениями будут игнорироваться (можно смело выделять случайные).
_________________
Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой.
Back to top
View user's profile Send private message
Cobblestone-TLT



Joined: 01 Feb 2014
Posts: 34

Post (Separately) Posted: Sun Feb 02, 2014 23:32    Post subject: Reply with quote

Первым делом решил, что дело в этом, пробовал убрать сам Smile Теперь ошибки не выдает, но и результата никакого. Я имею в виду совсем никакого - все архивы на месте, папок не создается.
Back to top
View user's profile Send private message
Flasher



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

Post (Separately) Posted: Sun Feb 02, 2014 23:35    Post subject: Reply with quote

Cobblestone-TLT
Опять с путём WinRAR накосячено? Wink
Либо выделяются только запароленные архивы.

+ Забыл ZIP-ы прописать (уже добавил). Не они?
_________________
Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой.
Back to top
View user's profile Send private message
Cobblestone-TLT



Joined: 01 Feb 2014
Posts: 34

Post (Separately) Posted: Sun Feb 02, 2014 23:38    Post subject: Reply with quote

Для проверки создано 3 архива:
1-no_pass
2-pass
3-no_pass2

Путь к рару вставляю копипастом (перепроверил правильность трижды). Вы у себя на живом примере тоже проверяли, все работает? (просто допускаю возможность, что "пишите музыку по нотам, а не на слух" Smile )

p.s. за фильтр по расширениям спасибо - штука нужная, теперь не обязательно "отсеивать" архивы от сопровождающих файлов описаний и прочих заметок Smile

Posted after 2 minutes:

Они родимые! Они!!! Smile
Спасибо огромное! Премного благодарен! То, что нужно. Отрабатывает на УРА!
Back to top
View user's profile Send private message
Flasher



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

Post (Separately) Posted: Mon Feb 03, 2014 00:11    Post subject: Reply with quote

Хорошо. Пож-та.
Если потребуется, могу потом и этот скрипт допились, у 7-zip всяко форматов больше.

P.S.: Кнопку тоже поправил.
_________________
Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой.
Back to top
View user's profile Send private message
Cobblestone-TLT



Joined: 01 Feb 2014
Posts: 34

Post (Separately) Posted: Mon Feb 03, 2014 08:57    Post subject: Reply with quote

Flasher
Во вложенных каталогах распаковка мне лично пока не требуется, достаточно обработки списка выделенных архивов, но если переделаете имеющийся в этой теме скрипт для работы с 7zip вместо WinRAR (ввиду его бОльшей "всеядности") без изменения функционала - будет приятно Smile
Пока вроде с "экзотическими" форматами дел иметь не приходится, но мало ли как оно обернется в будущем, а чем универсальней используемый инструмент - тем, по моему, лучше Wink

p.s. острой необходимости пока нет, но за темой слежу, если появится время и желание переделать - с радостью заберу исправленный вариант. А пока и на том огромное спасибо!
Back to top
View user's profile Send private message
Flasher



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

Post (Separately) Posted: Mon Feb 03, 2014 20:54    Post subject: Reply with quote

Cobblestone-TLT
Может, кто-то хочет с WinRAR работать. Оставлю и тот вариант.

 Decompress_selected_archives.vbs
В этот скрипт ещё добавил автосмену потенциального имени папки, если папка с тем же именем уже существует.
_________________
Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой.


Last edited by Flasher on Sun Feb 09, 2014 12:25; edited 3 times in total
Back to top
View user's profile Send private message
Cobblestone-TLT



Joined: 01 Feb 2014
Posts: 34

Post (Separately) Posted: Mon Feb 03, 2014 22:11    Post subject: Reply with quote

Flasher
Решил протестировать предложенный вариант и обнаружил следущее, скрипт(7-Zip) удаляет запароленные архивы, оставляя вместо них папку с файлами-пустышками. Кроме того попробовал еще раз на тех же архивах скрипт(WinRAR), так вот он на созданном мной для теста архиве с паролем выдает сообщение об ошибке в строке 24, символ 6 (Путь не найден). Не пойму в чем дело, вчера вроде с подобным же архивом работал как надо Sad
Если допилите 7-Zip чтобы не удалял нераспакованные архивы потестирую более тщательно.

p.s. проблемный архив "zip", создан встроенным архиватором TC8.5RC2, обычным способом распаковывается прекрасно, при обработке скриптом - ошибка.

p.p.s. создал из тех же файлов с тем же паролем rar архив WinRAR'ом - скрипт отрабатывает как надо, если аналогичный архив создать WinRAR'ом в формате - та же ошибка возвращается.

Posted after 2 minutes:

Создал еще несколько архивов с произвольным содержимым - все шифрованные архивы zip почему-то вызывают указанную ошибку Sad
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 Previous  1, 2, 3, 4  Next
Page 3 of 4

 
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