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 

Извлечение файлов из архивов сохраняя структуру

 
Post new topic   Reply to topic    Total Commander Forum Index -> Автоматизация Total Commander printer-friendly view
View previous topic :: View next topic  
Author Message
swr



Joined: 07 Jun 2007
Posts: 59

Post (Separately) Posted: Mon Sep 12, 2011 15:04    Post subject: Извлечение файлов из архивов сохраняя структуру Reply with quote

Извлечение файлов из архивов сохраняя структуру расположения этих архивов на жестком (оптическом) диске.

--------------------------------------------------------------------
Не могу решить задачу, помогите пожалуйста

Имеется библиотека, имеет вид: (это траум в epub)

Папка 1\Вложенная папка 1\Автор 1- Произведение.epub
Папка 1\Вложенная папка 2\Автор 2 - Произведение.epub
Папка 2\Вложенная папка 1\Автор 4 - Название Произведения.epub

Всего лишь требуется извлечь файлы *.opf из всех епубов, сохраняя полные пути (или частично полные - без буквы диска)
Чтобы структура библиотеки была сохранена и имела вид

Папка 1\Вложенная папка 1\Автор 1- Произведение.opf
Папка 1\Вложенная папка 2\Автор 2 - Произведение.opf
Папка 2\Вложенная папка 1\Автор 4 - Название Произведения.opf

На данный момент имеется кнопка:

TOTALCMD#BAR#DATA
%COMMANDER_PATH%\Примочки\_Скрипты\MultiRun.vbs 1 c:\Programs\Archives\WinRAR\WinRAR.exe
X -ibck -ad <<%L>> -n*opf -ep "f:\Временно\"
c:\Programs\Archives\WinRAR\WinRAR.exe
Распаковка EPUB сохраняя полные пути


-1

Всего лишь после указания каталога назначения ("f:\Временно\") можно было бы поставить что то вроде %P но без указания буквы диска, - в тотале к сожалению такого параметра нету (надеюсь что пока нету)

Было бы гораздо предпочтительнее не прибегать к помощи скриптов
(это не касается мультирана от Бати), а обойтись кнопочкой - если вам не составит труда сваять скрипт, то тоже буду очень благодарен, любое решение меня устроит, просто скрипты для меня не так понятны, соответственно менее универсальны и видоизменяемы мною.

PS = Тотал 7.50а
epub это zip


Last edited by swr on Mon Sep 12, 2011 22:33; edited 1 time in total
Back to top
View user's profile Send private message
Flasher



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

Post (Separately) Posted: Mon Sep 12, 2011 19:20    Post subject: Reply with quote

Не вижу смысла в создании новой темы.
Есть скрипт.
Заменить строку
Code:
      If FSO.FolderExists(F) Then ForFolder FSO.GetFolder(F)
на
Code:
      If FSO.FolderExists(F) Then
        ForFolder FSO.GetFolder(F)
      Else ForFile FSO.GetFile(F)
      End If

В предпоследней строке заменить -y на *.opf -y
Back to top
View user's profile Send private message
swr



Joined: 07 Jun 2007
Posts: 59

Post (Separately) Posted: Mon Sep 12, 2011 22:29    Post subject: Reply with quote

Спасибо большое, как быть? фильтр на *.opf не работает!

Он лежит не в корне а в папке OEBPS, 7z его ищет как я понимаю в корне архива

Вот структура:
Имя файла.epub\OEBPS\Content.opf

Любые вариации на тему добавления к фильтру разрешения файла еще и пути в архиве к этому файлу - не дали положительных результатов. Справка 7z не помогла Sad, ровно как и собственный мозг, помогите пожалуйста.

Да, еще 1 ньюанс - нужно будет указать каталог назначения для извлекаемых файлов, т.к. все *.epub находятся на DVD дисках.
Back to top
View user's profile Send private message
Flasher



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

Post (Separately) Posted: Mon Sep 12, 2011 22:49    Post subject: Reply with quote

C папками пойдёт?
Рекурсивно: -ir!*\*.opf вместо *.opf
Только из соотв. папок: -i!OEBPS\*.opf вместо *.opf

swr wrote:
Да, еще 1 ньюанс - нужно будет указать каталог назначения для извлекаемых файлов, т.к. все *.epub находятся на DVD дисках.
Это как-то с исходной задачей не стыкуется
swr wrote:
Всего лишь требуется извлечь файлы *.opf из всех епубов, сохраняя полные пути
Ну, коль надо, под Proga = ... вставить:
Code:
Path = WScript.Arguments(2)
If Right(Path,1) <> "\" Then Path = Path & "\"

и процедуру заменить на эту:
Code:
Sub ForFile(File)
  If LCase(FSO.GetExtensionName(File)) = LCase(WScript.Arguments(1)) Then WSH.Run """"  & Proga & """x """  & File & """ -o""" & Path & Mid(File.ParentFolder,4) & "\"" -i!OEBPS\*.opf -y", 0, True
End Sub
В качестве третьего параметра указывать путь к папке, например, "%T".
Back to top
View user's profile Send private message
swr



Joined: 07 Jun 2007
Posts: 59

Post (Separately) Posted: Tue Sep 13, 2011 11:33    Post subject: Reply with quote

Распаковка всех *.opf происходит в одну и ту же папку

Примерно это вывглядит так

Папка\Автор - Название 1.epub
Папка\Автор - Название 2.epub
Папка\Автор - Название 3.epub

Папка\OEBPS\Content.opf
Папка\OEBPS\Content.opf
Папка\OEBPS\Content.opf


' Рекурсивная распаковка архивов внутри выделенных каталогов
' Параметры: %L <расширение архива>
'==========================================
Dim FSO, WSH
Set FSO = CreateObject("Scripting.FileSystemObject")
Set WSH = CreateObject("WScript.Shell")
Proga = WSH.ExpandEnvironmentStrings("c:\Programs\Archives\7-Zip\7z.exe")
Path = WScript.Arguments(2)
If Right(Path,1) <> "\" Then Path = Path & "\"

With FSO.OpenTextFile(WScript.Arguments(0), 1)
Do While Not .AtEndOfStream
F = Trim(.ReadLine)
If F <> "" Then
If FSO.FolderExists(F) Then ForFolder FSO.GetFolder(F)
End If
Loop
.Close
End With

WSH.Popup "Распаковка завершена!", 1.4, "Результат", 64
Set FSO = Nothing
Set WSH = Nothing
WScript.Quit

Sub ForFolder(Folder)
Dim N
For Each N In Folder.Files
ForFile N
Next
For Each N In Folder.SubFolders
ForFolder N
Next
End Sub

Sub ForFile(File)
If LCase(FSO.GetExtensionName(File)) = LCase(WScript.Arguments(1)) Then WSH.Run """" & Proga & """x """ & File & """ -o""" & Path & Mid(File.ParentFolder,4) & "\"" -i!OEBPS\*.opf -y", 0, True
End Sub



Code:

TOTALCMD#BAR#DATA
"F:\Временно\_File Download\Local\Рекурсивная распаковка.vbs"
"%L" epub "%T"
C:\WINDOWS\System32\WScript.exe
Рекурсивная распаковка


-1
Back to top
View user's profile Send private message
Flasher



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

Post (Separately) Posted: Tue Sep 13, 2011 17:20    Post subject: Reply with quote

swr wrote:
Распаковка всех *.opf происходит в одну и ту же папку
Ну да, в папки OEBPS с сохранением структуры каталогов без буквы диска. Что не так?

%L в кавычки брать не обязательно.
Back to top
View user's profile Send private message
swr



Joined: 07 Jun 2007
Posts: 59

Post (Separately) Posted: Tue Sep 13, 2011 18:42    Post subject: Reply with quote

Я имею ввиду что распаковывается первый opf, затем распаковывается второй на место первого тем самым его заменяя, ну и так далее, в результате распаковки например 5 epub, остается один, последний распакованный opf.

В каждой папке не по 1 epub-у их там много.
Back to top
View user's profile Send private message
Flasher



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

Post (Separately) Posted: Tue Sep 13, 2011 19:04    Post subject: Reply with quote

swr
Заменяться может только в случае, если файл одноимённый.

Как вариант можно создавать папки с именем архива и класть файлы туда, тогда всё сохранится.

Под Proga = ... вставляем
Code:
Ext  = WScript.Arguments(1)
Процедура:
Code:
Sub ForFile(File)
  If LCase(FSO.GetExtensionName(File)) = LCase(Ext) Then WSH.Run """" & Proga & """x """ & File & """ -o""" & Path & Mid(File,4,Len(File)-Len(Ext)-4) & "\"" -i!OEBPS\*.opf -y", 0, True
End Sub
Back to top
View user's profile Send private message
swr



Joined: 07 Jun 2007
Posts: 59

Post (Separately) Posted: Tue Sep 13, 2011 20:48    Post subject: Reply with quote

Огромное Спасибо за решенную задачу, теперь все прекрасно работает! Wink
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
Page 1 of 1

 
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