Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   [решено] помощь в поиске строки в файле по условию (http://forum.oszone.net/showthread.php?t=189048)

tr011_tmn 22-10-2010 13:23 1524757

помощь в поиске строки в файле по условию
 
Доброго времени суток, столкнулся со следующей проблемой:
- пытаюсь автоматизировать работу с расширениями 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 1525331

Цитата:

Цитата tr011_tmn
как выдернуть верное имя из 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 2185369

Цитата:

Цитата amel27
представляю себе как-то так (в имени расширения не должно быть "!"): »

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

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

:: парсим файлы с расширением *.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 2185678

Код:

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 2185858

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

MegaZAC 18-07-2013 13:11 2186560

А подскажите как искать последнюю строку с данным условием? Ну если в файле много повторяющейся информации, и надо самую свежую.

Iska 18-07-2013 13:29 2186567

MegaZAC, пример файла и условия предоставьте.

MegaZAC 18-07-2013 17:41 2186705

Iska,
PHP код:

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 2186716

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

MegaZAC 18-07-2013 19:46 2186781

Должен быть другой текстовый файл содержащий поля:

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

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

Iska 18-07-2013 21:32 2186870

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

MegaZAC 19-07-2013 14:16 2187227

Да вам и не надо, просто скажите куда копать :)


Время: 17:36.

Время: 17:36.
© OSzone.net 2001-