View previous topic :: View next topic |
Author |
Message |
swr
Joined: 07 Jun 2007 Posts: 59
|
(Separately) Posted: Mon Sep 12, 2011 15:04 Post subject: Извлечение файлов из архивов сохраняя структуру |
|
|
Извлечение файлов из архивов сохраняя структуру расположения этих архивов на жестком (оптическом) диске.
--------------------------------------------------------------------
Не могу решить задачу, помогите пожалуйста
Имеется библиотека, имеет вид: (это траум в 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 |
|
|
Flasher
Joined: 06 Nov 2009 Posts: 14229 Location: Москва
|
(Separately) Posted: Mon Sep 12, 2011 19:20 Post subject: |
|
|
Не вижу смысла в создании новой темы.
Есть скрипт.
Заменить строку 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 |
|
|
swr
Joined: 07 Jun 2007 Posts: 59
|
(Separately) Posted: Mon Sep 12, 2011 22:29 Post subject: |
|
|
Спасибо большое, как быть? фильтр на *.opf не работает!
Он лежит не в корне а в папке OEBPS, 7z его ищет как я понимаю в корне архива
Вот структура:
Имя файла.epub\OEBPS\Content.opf
Любые вариации на тему добавления к фильтру разрешения файла еще и пути в архиве к этому файлу - не дали положительных результатов. Справка 7z не помогла , ровно как и собственный мозг, помогите пожалуйста.
Да, еще 1 ньюанс - нужно будет указать каталог назначения для извлекаемых файлов, т.к. все *.epub находятся на DVD дисках. |
|
Back to top |
|
|
Flasher
Joined: 06 Nov 2009 Posts: 14229 Location: Москва
|
(Separately) Posted: Mon Sep 12, 2011 22:49 Post subject: |
|
|
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 |
|
|
swr
Joined: 07 Jun 2007 Posts: 59
|
(Separately) Posted: Tue Sep 13, 2011 11:33 Post subject: |
|
|
Распаковка всех *.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 |
|
|
Flasher
Joined: 06 Nov 2009 Posts: 14229 Location: Москва
|
(Separately) Posted: Tue Sep 13, 2011 17:20 Post subject: |
|
|
swr wrote: | Распаковка всех *.opf происходит в одну и ту же папку | Ну да, в папки OEBPS с сохранением структуры каталогов без буквы диска. Что не так?
%L в кавычки брать не обязательно. |
|
Back to top |
|
|
swr
Joined: 07 Jun 2007 Posts: 59
|
(Separately) Posted: Tue Sep 13, 2011 18:42 Post subject: |
|
|
Я имею ввиду что распаковывается первый opf, затем распаковывается второй на место первого тем самым его заменяя, ну и так далее, в результате распаковки например 5 epub, остается один, последний распакованный opf.
В каждой папке не по 1 epub-у их там много. |
|
Back to top |
|
|
Flasher
Joined: 06 Nov 2009 Posts: 14229 Location: Москва
|
(Separately) Posted: Tue Sep 13, 2011 19:04 Post subject: |
|
|
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 |
|
|
swr
Joined: 07 Jun 2007 Posts: 59
|
(Separately) Posted: Tue Sep 13, 2011 20:48 Post subject: |
|
|
Огромное Спасибо за решенную задачу, теперь все прекрасно работает! |
|
Back to top |
|
|
|