View previous topic :: View next topic |
Author |
Message |
serhiy
Joined: 10 Dec 2005 Posts: 11 Location: Tyachiv
|
(Separately) Posted: Fri Mar 13, 2009 23:13 Post subject: Скрипт для распаковки избранных файлов из нескольких архивов |
|
|
Добрый день.
Столкнулся с следующей задачей
Много архивных файлов (rar, zip, tgz) и в каждом из них нужно найти и извлечь скажем файл template.jpg (или png) и после извлечения переименовать в такое же название как и название архива. Если в архиве несколько tempate.jpg - переименовать на "название-архива-1.jpg", "название-архива-2.jpg" и тд. (Хорошо б было если вобще в место названия был бы полный внутренний путь к этому файлу).
Есть ли возможность просканировать все архивы и главное вложеные архивы для получения списка таких файлов.
Сам в скриптах не особо силен, возможно подскажете способы реализации.
Спасибо большое
P.S. Обращаюсь с такой проблемой поскольку нужно обработать около 4-5 гигов или даже больше архивных файлов.. вручную уже сил нет.
|
|
Back to top |
|
|
serhiy
Joined: 10 Dec 2005 Posts: 11 Location: Tyachiv
|
(Separately) Posted: Sat Mar 14, 2009 19:54 Post subject: |
|
|
Пока дошел до следующего варианта :
1. Добавил в тотал скрипт
' File: UnpackHere.vbs
' Description: Распаковывает выделенные архивы в ту же директорию
' где расположены сами архивы, причем каждый архив в
' отдельную папку с именем, как у файла архива
' Requirements: WSH Helper for TC by Volniy
' Installation: Создайте для скрипта, например, кнопку на панели TC
' Copyright: (c) 2005, Volniy
Option Explicit
Dim TCS
Set TCS=CreateObject("TCSCRIPT.Helper")
TCS.Pause=100
TCS.SendCommand "cm_UnpackFiles", False
TCS.SendKeystroke "{DELETE}"
TCS.SendKeystroke "{TAB 4}"
TCS.SendKeystroke chr(32)
TCS.SendKeystroke "{ENTER}"
Set TCS = Nothing
WScript.Quit
2. Открываю 2 тотала - в обоих нажимаю ctrl+B и ставлю фильтрацию по rar, zip, tar, gz
3. Выделяю архивы в обоих тоталах
В одном из них запускаю скрипт - по его окончанию из другого тотала удаляю все выделеные архивы (ибо они уже распакованы)
4. Повторяю действия 2-3 до тех пор пока по ctrl+B не останется ни одного архива.
5. Опять ctrl+B - ищу все файлы template.png - выделяю
6. Переименовываю при помощи тотала - групповое переименование + [=tc.Путь]
7. Опять ctrl+B все переименованые файлы копирую в отдельную папку - все остальное можно удалить.. до поры до времени не понадобится.
Долго однако.
Просьба помочь упростить хотя б такой вариант |
|
Back to top |
|
|
Tol!k
Joined: 01 Apr 2008 Posts: 1727 Location: Арзамас
|
(Separately) Posted: Sat Mar 14, 2009 20:35 Post subject: |
|
|
serhiy wrote: | 3. Выделяю архивы в обоих тоталах
В одном из них запускаю скрипт - по его окончанию из другого тотала удаляю все выделеные архивы (ибо они уже распакованы) |
фоновая распаковка архивов с последующим удалением архивов
Last edited by Tol!k on Sat Mar 14, 2009 22:35; edited 1 time in total |
|
Back to top |
|
|
serhiy
Joined: 10 Dec 2005 Posts: 11 Location: Tyachiv
|
(Separately) Posted: Sat Mar 14, 2009 22:20 Post subject: |
|
|
Сделал так
Option Explicit
Dim TCS
Set TCS=CreateObject("TCSCRIPT.Helper")
TCS.Pause=100
TCS.SendCommand "cm_SaveSelection", False
TCS.SendCommand "cm_UnpackFiles", False
TCS.SendKeystroke "{DELETE}"
TCS.SendKeystroke "{TAB 4}"
TCS.SendKeystroke chr(32)
TCS.SendKeystroke "{ENTER}"
TCS.SendCommand "cm_RestoreSelection", False
TCS.SendKeystroke "{DELETE}"
TCS.SendKeystroke "{ENTER}"
Set TCS = Nothing
WScript.Quit
Выкинуло ошибку :
Прервано пользователем. -
Чёт не работает - как исправить? |
|
Back to top |
|
|
Tol!k
Joined: 01 Apr 2008 Posts: 1727 Location: Арзамас
|
(Separately) Posted: Sat Mar 14, 2009 22:34 Post subject: |
|
|
serhiy wrote: | Выкинуло ошибку :
Прервано пользователем. - | Да, есть такое дело. Попробуй скрипт от Batya
Добавлено:
Не успевают распаковаться все архивы.
Option Explicit
Dim TCS
Set TCS=CreateObject("TCSCRIPT.Helper")
TCS.Pause=100
TCS.SendCommand "cm_SaveSelection", False
TCS.SendCommand "cm_UnpackFiles", False
TCS.SendKeystroke "{DELETE}"
TCS.SendKeystroke "{TAB 4}"
TCS.SendKeystroke chr(32)
TCS.SendKeystroke "{ENTER}"
'Время на распаковку всех выделенных архивов
TCS.Pause=7000
TCS.SendCommand "cm_RestoreSelection", False
TCS.Pause=100
TCS.SendKeystroke "+{DELETE}"
TCS.SendKeystroke "{ENTER}"
Set TCS = Nothing
WScript.Quit
а конкретно в твоём случае
Option Explicit
Dim TCS
Set TCS=CreateObject("TCSCRIPT.Helper")
TCS.Pause=100
TCS.SendCommand "cm_SaveSelection", False
TCS.SendCommand "cm_UnpackFiles", False
TCS.SendKeystroke "{DELETE}"
TCS.SendKeystroke "{TAB}"
'Маска для распаковки
TCS.SendKeystroke "template.*"
TCS.SendKeystroke "{TAB 3}"
TCS.SendKeystroke chr(32)
TCS.SendKeystroke "{ENTER}"
'Время на распаковку всех выделенных архивов
TCS.Pause=7000
TCS.SendCommand "cm_RestoreSelection", False
TCS.Pause=100
TCS.SendKeystroke "+{DELETE}"
TCS.SendKeystroke "{ENTER}"
Set TCS = Nothing
WScript.Quit
чтобы извлеклись только template.* |
|
Back to top |
|
|
serhiy
Joined: 10 Dec 2005 Posts: 11 Location: Tyachiv
|
(Separately) Posted: Sun Mar 15, 2009 06:04 Post subject: |
|
|
Уже немного проще! Спасибо..
Работает правда не до конца так как нужно, но чувствую момент истины где то близко
Проблема в том что этот template* зарыт еще во вложеных архивах внутри текущего, поэтому приходится после первой распаковки искать опять архивы, потом еще раз и еще раз.. пока в папке не останется ни одного архива и только после этого уже искать все распакованные template*.png - после чего соотвественно их и переименовывать.
Итого вся вышеописанная операция на двухядерной машине - имея скажем в папке 200 архивов - занимает часа 2-3 - тотал периодически подвисает для отображения всех zip,rar и тд через ctrl+B |
|
Back to top |
|
|
serhiy
Joined: 10 Dec 2005 Posts: 11 Location: Tyachiv
|
(Separately) Posted: Sun Mar 15, 2009 06:22 Post subject: |
|
|
Tol!k wrote: |
'Время на распаковку всех выделенных архивов
TCS.Pause=7000
|
Еще плохо что время не умеет динамически меняться (если скажем 80 архивов TCS.Pause=70000 а если 10 то 3000)
Хорошо б было если после каждой распаковки распакованный архив удалялся, т.е распаковал - удалился, распаковал - удалился итд или даже не знаю как бы его эдак... |
|
Back to top |
|
|
Tol!k
Joined: 01 Apr 2008 Posts: 1727 Location: Арзамас
|
(Separately) Posted: Sun Mar 15, 2009 12:56 Post subject: |
|
|
serhiy wrote: | Проблема в том что этот template* зарыт еще во вложеных архивах внутри текущего, поэтому приходится после первой распаковки искать опять архивы, потом еще раз и еще раз.. пока в папке не останется ни одного архива и только после этого уже искать все распакованные template*.png | Значит нужно извлекать не только template*, но и вложенные архивы:
'Маска для распаковки
TCS.SendKeystroke "template* *.rar *.zip *.tgz" |
|
Back to top |
|
|
Tol!k
Joined: 01 Apr 2008 Posts: 1727 Location: Арзамас
|
(Separately) Posted: Sun Mar 15, 2009 13:27 Post subject: |
|
|
serhiy wrote: | Хорошо б было если после каждой распаковки распакованный архив удалялся, т.е распаковал - удалился, распаковал - удалился итд или даже не знаю как бы его эдак... | Написать батник и повесить его на кнопку с параметром %L
Заготовка:
Code: | chcp 1251 > nul
setlocal enableextensions
for /F "delims=" %%a in (%1) do (
start /wait архиватор.exe распаковать "%%a" -параметры
del /Q "%%a"
) |
Так даже быстрее — ждать придётся ровно столько, сколько нужно для распаковки |
|
Back to top |
|
|
serhiy
Joined: 10 Dec 2005 Posts: 11 Location: Tyachiv
|
(Separately) Posted: Sun Mar 15, 2009 14:36 Post subject: |
|
|
Tol!k wrote: | Значит нужно извлекать не только template*, но и вложенные архивы:
'Маска для распаковки
TCS.SendKeystroke "template* *.rar *.zip *.tgz" |
Приблизительно сработало:
Выделяю - распаковываю
Ctrl+B
Опять выделяю - распаковываю итд
Ну в результате вижу все template.png - супер!
Единственно что со временем неудобно..
Если можно чуть поподробнее насчет батника.
Попробовал - чего то не совсем получилось.
Чисто интуитивно -
chcp 1251 > nul
setlocal enableextensions
for /F "delims=" %%a in (%1) do (
start /wait
C:\Program Files\WinRAR\WinRar.exe
"%%a"
X -ibck -ad <<%L>> "%P" (Эта строка параметров??)
del /Q "%%a"
) |
|
Back to top |
|
|
Tol!k
Joined: 01 Apr 2008 Posts: 1727 Location: Арзамас
|
(Separately) Posted: Sun Mar 15, 2009 16:02 Post subject: |
|
|
Quote: | start /wait
C:\Program Files\WinRAR\WinRar.exe
"%%a"
X -ibck -ad <<%L>> "%P" (Эта строка параметров??) | Никаких переносов здесь быть не должно, это одна команда. Про параметры написано в справках соответствующих программ. %L и %P — это параметры Тотала, в батнике они могут оказаться только в виде %1 и %2.
---------------------------------------------- template.cmd ----------------------------------------------
@echo off&chcp 1251>nul
setlocal enableextensions
for /F "delims=" %%a in (%1) do (
start /wait C:\Progra~1\WinRAR\WinRar.exe X -y -ibck "%%a" @Диск:\путь\template.lst "%%~dpna\"&&del /Q "%%a"
)
---------------------------------------------- template.cmd ----------------------------------------------
WinRar.exe с коротким путём, т.к. start /wait "C:\Program Files\WinRAR\WinRar.exe" у меня не работает
Содержимое template.lst:
template*
*.rar
*.zip
*.tgz
Last edited by Tol!k on Sun Jun 28, 2009 17:57; edited 1 time in total |
|
Back to top |
|
|
serhiy
Joined: 10 Dec 2005 Posts: 11 Location: Tyachiv
|
(Separately) Posted: Sun Mar 15, 2009 18:21 Post subject: |
|
|
Все супер!!! Премного благодарен... работает так как нужно!!!
Можно ли еще добавить одну функцию.. - если нет файлов для извлечения - чтоб это диагностическое сообщение закрывалось автоматом.. хотя это уже мелочи - главное все заработало!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! Счастью нет границ! |
|
Back to top |
|
|
Tol!k
Joined: 01 Apr 2008 Posts: 1727 Location: Арзамас
|
(Separately) Posted: Sun Mar 15, 2009 18:43 Post subject: |
|
|
serhiy wrote: | Можно ли еще добавить одну функцию.. - если нет файлов для извлечения - чтоб это диагностическое сообщение закрывалось автоматом.. |
Справка WinRar wrote: | Ключ -Y — подразумевать ответ "Да" на все запросы
--------------------------------------------------------------------------------
Если указан этот ключ, то на все запросы будет автоматически даваться ответ "Да". |
start /wait C:\Progra~1\WinRAR\WinRar.exe X -y "%%a" @template.lst "%%~dpna\"
Но пустые папки создаются |
|
Back to top |
|
|
serhiy
Joined: 10 Dec 2005 Posts: 11 Location: Tyachiv
|
(Separately) Posted: Sun Mar 15, 2009 20:05 Post subject: |
|
|
Добавил еще ключик
-ibck - запустить WinRAR как фоновый процесс в системном лотке (ключ);
Получилось
start /wait C:\Progra~1\WinRAR\WinRar.exe X -y -ibck "%%a" @template.lst "%%~dpna\"
Лепота ! |
|
Back to top |
|
|
|