Войти

Показать полную графическую версию : [решено] помощь в поиске строки в файле по условию


tr011_tmn
22-10-2010, 13:23
Доброго времени суток, столкнулся со следующей проблемой:
- пытаюсь автоматизировать работу с расширениями Mozilla

удалось добиться извлечения расширения во временную папку, но не хватает тямы как выдернуть верное имя из rdf, и использовать его в виде имени папки

В голове примерно представляю как сделать а вот бантиком не удается реализовать

FOR %%B IN (Extensions) DO (
FOR /F "USEBACKQ DELIMS=" %%I in (`DIR .\%%B\*.xpi /B /ON`) do (
start /min /wait 7z.exe x .\Extensions\%%~nI.xpi -o.\Extensions\Exttmp\%%~nI
FOR /F "delims=" %%P in (' ".\Extensions\Exttmp\%%~nI\*.rdf" /i "<em:id>*</em:id>"') do (
if NOT %%P==<em:id>{ec8030f7-c20a-464f-9b0e-13a3a9e97384}</em:id> (
if Not %%P==<em:id>{3550f703-e582-4d05-9a08-453d09bdfdc6}</em:id> (
Ren .\Extensions\Exttmp\%%~nI Extensions\Exttmp\%%P
)
)
)
)
)

amel27
23-10-2010, 07:59
как выдернуть верное имя из rdf, и использовать его в виде имени папки »представляю себе как-то так (в имени расширения не должно быть "!"):
@echo off
SETLOCAL EnableExtensions EnableDelayedExpansion

for %%i in (.\extensions\*.xpi) do for /f "tokens=*" %%a in (
'7z e "%%i" -so install.rdf^|find /i "<em:name>"') do (set "$a=%%a"
7z x "%%i" -y -o".\Extensions\!$a:~9,-10!"
)>nul

tr011_tmn
16-07-2013, 09:53
представляю себе как-то так (в имени расширения не должно быть "!"): »

Огромное спасибо. Наконец то дошли руки, и идея воплотилась благодаря тебе в конструктор, но возникло одно но.

при выполнении запроса:

:: парсим файлы с расширением *.jar на наличие <em:id> в *.rdf
for %%i in (.\Themes\*.jar) do for /f "tokens=*" %%a in (
'7z e "%%i" -so install.rdf^|find /i "<em:id>"') do (set "$a=%%a"
7z x "%%i" -y -o".\bin\tmp\core\defaults\profile\extensions\!$a:~7,-8!" >nul
)>nul

получаю в окне консоли следующий текст:

7-Zip [64] 9.30 alpha Copyright (c) 1999-2012 Igor Pavlov 2012-10-26

Processing archive: .\Themes\ft_sleekdark-2.6-fx-windows.jar

Extracting install.rdf

Everything is Ok

Size: 1120
Compressed: 728966
Можно ли от него избавится? Скрыть результат работы архиватора с ключом -so?

Iska
16-07-2013, 19:32
for %%i in (.\Themes\*.jar) do for /f "tokens=*" %%a in (
'7z e "%%i" -so install.rdf 2^>nul ^|find /i "<em:id>"'
) do …

tr011_tmn
17-07-2013, 07:45
Iska, спасибо огромное. ты оказал неоценимую помощь :hi:

MegaZAC
18-07-2013, 13:11
А подскажите как искать последнюю строку с данным условием? Ну если в файле много повторяющейся информации, и надо самую свежую.

Iska
18-07-2013, 13:29
MegaZAC, пример файла и условия предоставьте.

MegaZAC
18-07-2013, 17:41
Iska,
08/02/2013-06h56m52s187ms | --> | 0xcac | +bnr_QueryCashUnit () : transpC=0
BU id=43061200124 count=0 status=6031 lock=0 threshold:mode/e-l-h-f/status=1/0-0-0-15/8
6 0- - id=43061200124 kind=6019 type=6029 status=6031 initialCount=0 count=0
CB id= count=171 status=6031 lock=0 threshold:mode/e-l-h-f/status=0/0-0-0-600/0
12 0- - id= kind=6017 type=6021 status=6031 init-/dep-/retr-/empt-/forg-/disap-/count = 0/17/0/0/0/13/17
13 5000-RUB-AA id= kind=6017 type=6023 status=6031 init-/dep-/retr-/empt-/forg-/disap-/count = 0/2095/0/0/0/0/0
14 500000-RUB-AA id= kind=6017 type=6023 status=6031 init-/dep-/retr-/empt-/forg-/disap-/count = 0/1083/0/0/0/0/3
15 1000-RUB-AA id= kind=6017 type=6023 status=6031 init-/dep-/retr-/empt-/forg-/disap-/count = 0/1639/0/0/0/0/18
16 10000-RUB-AA id= kind=6017 type=6023 status=6031 init-/dep-/retr-/empt-/forg-/disap-/count = 0/4235/0/0/0/1/43
17 100000-RUB-AA id= kind=6017 type=6023 status=6031 init-/dep-/retr-/empt-/forg-/disap-/count = 0/13026/0/0/0/0/58
18 50000-RUB-AA id= kind=6017 type=6023 status=6031 init-/dep-/retr-/empt-/forg-/disap-/count = 0/6167/0/0/0/0/32
LO1 id=41060800075 count=113 status=6031 lock=0 threshold:mode/e-l-h-f/status=0/0-0-0-200/0
5 5000-RUB-AA id=41060800075 kind=6019 type=6029 status=6031 initialCount=0 count=0
11 5000-RUB-AA id=41060800075 kind=6016 type=6023 status=6031 init-/disp-/rej-/count = 0/33/0/113
RE3 id=41061000138 count=23 status=6031 lock=0 threshold:mode/e-l-h-f/status=1/0-15-100-30/0
1 5000-RUB-AA id=41061000138 kind=6019 type=6029 status=6031 initialCount=0 count=0
7 5000-RUB-AA id=41061000138 kind=6018 type=6023 status=6031 initialCount=0 count=23
RE4 id=41061000138 count=45 status=6031 lock=0 threshold:mode/e-l-h-f/status=1/0-0-100-55/0
2 10000-RUB-AA id=41061000138 kind=6019 type=6029 status=6031 initialCount=0 count=0
8 10000-RUB-AA id=41061000138 kind=6018 type=6023 status=6031 initialCount=0 count=45
RE5 id=41061000139 count=30 status=6031 lock=0 threshold:mode/e-l-h-f/status=1/0-0-100-30/1
3 100000-RUB-AA id=41061000139 kind=6019 type=6029 status=6031 initialCount=0 count=0
9 100000-RUB-AA id=41061000139 kind=6018 type=6023 status=6031 initialCount=0 count=30
RE6 id=41061000139 count=55 status=6031 lock=0 threshold:mode/e-l-h-f/status=1/0-0-100-55/1
4 50000-RUB-AA id=41061000139 kind=6019 type=6029 status=6031 initialCount=0 count=0
10 50000-RUB-AA id=41061000139 kind=6018 type=6023 status=6031 initialCount=0 count=55


Вот такие вот сообщения периодически пишут в текстовый файл. Глобально задача в том чтобы находить самый низ файла, там находить каждый ID из четырёх RE (3,4,5,6), оттуда брать значение второй строчки count=* После всего этого надо собранные значения с указанием даты и времени выписывать в какой-нить свой лог. Значения count всегда цифровые и не превышают 300.
Скрипт планирую положить в качестве задачи и выполнять каждые минут 15. В итоге всё это надо будет экспортировать в 1С, но это уже проблема других людей.

Iska
18-07-2013, 17:57
MegaZAC, хорошо бы изложить то же самое, но по-русски. Желательно с примером того, что должно получиться при извлечении данных из выложенного выше образца.

MegaZAC
18-07-2013, 19:46
Должен быть другой текстовый файл содержащий поля:

1) дата 2) время 3) ID (например id=41061000138) 4) 23 (из той же строчки с ID, последняя цифра)

Т.е. BAT открывает имеющийся текстовый файл, лезет в самый низ, и снизу вверх вытаскивает перечисленные значения и сохраняет в отдельный файл.

Iska
18-07-2013, 21:32
MegaZAC, я — пас: не испытываю ни малейшего энтузязизьма в написании пакетных файлов, которые должны будут лазать снизу вверх.

MegaZAC
19-07-2013, 14:16
Да вам и не надо, просто скажите куда копать :)




© OSzone.net 2001-2012