Команда findstr, поиск двух строк одновременно

  • Автор темы Кирилл
  • Дата начала
Кирилл

Кирилл

Команда форума
Администратор
Сообщения
13,715
Реакции
6,106
Баллы
913
Привет.

Собрал такой скрипт:
Код:
@echo off
Chcp 866 >nul
title search
cd /d "%~dp0"
echo %cd%
findstr /b /i /o "HKEY_LOCAL_MACHINE start" "%~dp01.reg"


pause
exit /B
Но поиск ничего не дает.
Как задать поиск по двум строкам?
 
Dragokas

Dragokas

Very kind Developer
Команда форума
Супер-Модератор
Разработчик
Клуб переводчиков
Сообщения
6,055
Реакции
5,845
Баллы
648
Koza Nozdri, попробуй так:

Код:
type "%~dp01.reg" | findstr /b /i /o "[HKEY_LOCAL_MACHINE \"start"
 
Кирилл

Кирилл

Команда форума
Администратор
Сообщения
13,715
Реакции
6,106
Баллы
913
Получил называется)
Теперь требуется все переделывать...
короче совет нужен,раньше я это делал в Notepad++ но убей не помню как.
допустим имею экспорт раздела с сервисами,хочу создать рег файл с параметрами запуска сервисов.
Для этого нужно отсеить те строки,в которых содержится параметр start между HKEY_LOCAL_MACHINE,если параметра нет то строка не пропускается
пример:
Код:
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\3ware]

"Start"=dword:00000000
а вот такая запись пропускается:
Код:
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\3ware\Parameters]
"BusType"=dword:00000008
"IoTimeoutValue"=dword:0000003c
Я конечно понимаю что это можно и вручную,но емае поиск в рег файлах и реестре для меня порой целое занятие - руками не напашешься.

Думал через reg query сделать,но там формат строк не подходит.
Если только ...может переписать кое что?

Скажем выполнить поиск reg query а нужные строки переписать?
Код:
reg query HKLM\SYSTEM\CurrentControlSet\Services /v start /s
получаем:
Код:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\UASPStor
    Start    REG_DWORD    0x3

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\UCX01000
    Start    REG_DWORD    0x3

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\udfs
    Start    REG_DWORD    0x4

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\UEFI
    Start    REG_DWORD    0x3

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\UI0Detect
    Start    REG_DWORD    0x3

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\uliagpkx
    Start    REG_DWORD    0x0

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\umbus
    Start    REG_DWORD    0x3

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\UmPass
    Start    REG_DWORD    0x3
Выходит нужно каждую строку содержащую HKEY_LOCAL_MACHINE\ заключить в квадратные скобки
а
Код:
Start    REG_DWORD    0x3
преобразовать в
Код:
"Start"=dword:00000003
кажется так уже реальнее становится.
Что скажете?
 
Dragokas

Dragokas

Very kind Developer
Команда форума
Супер-Модератор
Разработчик
Клуб переводчиков
Сообщения
6,055
Реакции
5,845
Баллы
648
Фильтровать батниками не так просто.
Этот вариант будет глотать знаки (!), если таковые имеются в имени службы:

Код:
@echo off
SetLocal EnableExtensions EnableDelayedExpansion

:: backup services config
reg export HKLM\SYSTEM\CurrentControlSet\Services services.reg

:: header
> services_start.reg echo Windows Registry Editor Version 5.00

:: only routine and parameters: start + type
type services.reg | findstr /b /i "[HKEY_LOCAL_MACHINE \"start \"type" >> temp.reg

:: filter for empty routines
For /F "UseBackQ delims=" %%a in ("temp.reg") do (
  set "prev=!cur!"
  set "cur=%%a"
  if "!cur:~0,5!" neq "[HKEY" (
  if "!prev:~0,5!"=="[HKEY" >> services_start.reg echo.!prev!
  >> services_start.reg echo.!cur!
))
del temp.reg
del services.reg
pause
 
Dragokas

Dragokas

Very kind Developer
Команда форума
Супер-Модератор
Разработчик
Клуб переводчиков
Сообщения
6,055
Реакции
5,845
Баллы
648
Так что - будешь как-то улучшать процедуру или этого скрипта будет достаточно?
Обрати внимание: файл не до конца фильтруется. Туда попадают некоторые подразделы, у которых только параметр "Type".
Я обращаю твое внимание на этот параметр, т.к. это очень важно для отладки проблем.
Читай в этой статье про то, какие службы исключаются из загрузки в Безопасном режиме.

Я так понимаю цель этого скрипта - получение слепка запуска со здоровой машины (и как вариант - построение отчета на больной).
Я прав?
Есть еще идея:
1) Скрипт, сравнивающий параметры запуска и перечень служб оригинальной ОС с проблемной.
В результат попадут только пункты, где тип службы, ее состояние или режим запуска отличается от эталонной
+ здесь же отдельным списком должны светится все, что не-Майкрософт.
 
Последнее редактирование:
Кирилл

Кирилл

Команда форума
Администратор
Сообщения
13,715
Реакции
6,106
Баллы
913
получение слепка запуска со здоровой машины
Да.
Но цель не одна.
Первым делом - получаю эталон,который добавлю в эту тему
Второе - да,получение списка служб в разнице при вариантах загрузке,а так же сравнение на живой ос с эталоном.
Это будет нужно для сбора лога в этой теме

Далее так как не могу повторить поиск в своем редакторе,то нужно научиться делать это иначе.
Так как эталоны будут не только для служб,но и для некоторых других важных настроек.Я что подумал.
Можно не мудрить а в тот вариант что имеется при поиске добавить поиск строки:
Код:
set "Start REG_DWORD  0x3"="Start"="dword:00000003"
(тока как экранировать кавычки? згаком ^ ?)
И тупо выполнить ее замену на заготовленный шаблон?
Всего четыре вида строк и четыре шаблона,не так много.
или этого скрипта будет достаточно?
Думаю не имеем мы права на ошибку)
Еще по соображаю,может ты что подскажешь.
 
Последнее редактирование:
Dragokas

Dragokas

Very kind Developer
Команда форума
Супер-Модератор
Разработчик
Клуб переводчиков
Сообщения
6,055
Реакции
5,845
Баллы
648
Второе - да,получение списка служб в разнице при вариантах загрузке,а так же сравнение на живой ос с эталоном.
Не, вручную - это не комильфо.
Должно быть все на автомате.
Требуется готовая база данных:
Поля:
1) ОСь - Версия
2) ОСь - редакция
3) ОСь - битность
4) Служба - имя
5) Служба - тип
6) Служба - режим запуска
7) Служба - запущена ли в данный момент

Формат базы - ну простейшее CSV - это, когда каждое поле отделено точкой запятой.
Такой файл легко просматривать в Excel-e.

Скрипты:
1) который формирует (дописывает) такую базу.
2) сверяется с этой базой с созданием отчета отклонений (первыми идут службы MS, дальше другие).

Раз уж:
Думаю не имеем мы права на ошибку)
то язык VBScript с использованием WMI
 
Кирилл

Кирилл

Команда форума
Администратор
Сообщения
13,715
Реакции
6,106
Баллы
913
же сравнение на живой ос с эталоном.
вручную - это не комильфо.
А вручную и не трэба)
Я по лузерски имею метод.
Сравнение с выводом разницы.
На автомате будет здорово,но ексель не знаю стоит ли - далеко не на каждом компе есть.
По остальному абсолютно согласен)
Ладно,буду готовить эталоны.
 
Dragokas

Dragokas

Very kind Developer
Команда форума
Супер-Модератор
Разработчик
Клуб переводчиков
Сообщения
6,055
Реакции
5,845
Баллы
648
но ексель не знаю стоит ли - далеко не на каждом компе есть.
При чем здесь?
Можешь и не открывать файл базы данных.
Думаю, формат отчета GetCPUUsage видел. Это тоже самое.
БД только утилите-анализатору нужна. Там все просто. Одна строка базы парсится на массив одной командой: arr = split(line,";")
Я Excel привел как пример программы, которой можно увидеть содержимое базы (и то если захочется) + форму самого отчета,
если ты не предложить более лучший вариант с HTML-логом. Как ты знаешь, с HTML я заморачиваться не буду.
Разве что ты (или помощники) составят нужный шаблон под отчет.
 
Кирилл

Кирилл

Команда форума
Администратор
Сообщения
13,715
Реакции
6,106
Баллы
913
А,все понял.
Нормально и в блокноте смотрится.
Под шаблоном ты что то типа этого подразумеваешь?
HTML:
<div id="NTLogEvent" class="my_tab">
    <table style="border:1px solid #000000;width:100%"><tr style="border:1px solid #000000;text-align:center;"><td><span class="data_title">Сообщение</span></td><td><span class="data_title">Тип</span></td><td><span class="data_title">timegenerated</span></td><td><span class="data_title">sourcename</span></td><td><span class="data_title">Категория</span></td><td><span class="data_title">Код события</span></td><td><span class="data_title">файл журнала</span></td><td><span class="data_title">пользователь</span></td></tr><tr class="table_bgcolor1"  ><td><a style="cursor:pointer;" title="Ошибка" class="tooltip5" id="4a80ed0b721265542727cc1330f81bea" ><span class="data_title">Сообщение</span></a></td><td><span class="data_content">Ошибка</span></td><td><span class="data_content">2013/10/14 12:37:24</span></td><td><a href="http://www.eventid.net/display.asp?eventid=80&source=SideBySide" target="_blank"><span class="data_title">SideBySide</span></a></td><td><span class="data_content"></span></td><td><a href="http://www.eventid.net/display.asp?eventid=80&source=SideBySide" target="_blank"><span class="data_title">80</span></a></td><td><span class="data_content">Application</span></td><td><span class="data_content">N/A</span></td></tr><tr class="table_bgcolor2"  ><td><a style="cursor:pointer;" title="Ошибка" class="tooltip5" id="4a80ed0b721265542727cc1330f81bea" ><span class="data_title">Сообщение</span></a></td><td><span class="data_content">Ошибка</span></td><td><span class="data_content">2013/10/14 12:37:24</span></td><td><a href="http://www.eventid.net/display.asp?eventid=80&source=SideBySide" target="_blank"><span class="data_title">SideBySide</span></a></td><td><span class="data_content"></span></td><td><a href="http://www.eventid.net/display.asp?eventid=80&source=SideBySide" target="_blank"><span class="data_title">80</span></a></td><td><span class="data_content">Application</span></td><td><span class="data_content">N/A</span></td></tr><tr class="table_bgcolor1"  ><td><a style="cursor:pointer;" title="Предупреждение" class="tooltip5" id="9c2f0e8ecba10e26d79ccab0771cfd37" ><span class="data_title">Сообщение</span></a></td><td><span class="data_content">Предупреждение</span></td><td><span class="data_content">2013/10/14 12:30:49</span></td><td><a href="http://www.eventid.net/display.asp?eventid=52&source=Microsoft-Windows-Time-Service" target="_blank"><span class="data_title">Microsoft-Windows-Time-Service</span></a></td><td><span class="data_content"></span></td><td><a href="http://www.eventid.net/display.asp?eventid=52&source=Microsoft-Windows-Time-Service" target="_blank"><span class="data_title">52</span></a></td><td><span class="data_content">System</span></td><td><span class="data_content">NT AUTHORITY\LOCAL SERVICE</span></td></tr></table></div>
</center></div></div><div id="Devices" style="padding-top:0px; padding-bottom:0em; padding-left:0em; padding-right:0em;">    <div id="main_tab3" class="tab2" style="padding:0px;position:relative;border:0px;"><ul style="background:#B4E0CD none repeat scroll 0 0;padding-top:5px;padding-left:30px;padding-right:0px;border-left:1px solid;border-right:1px solid;border-bottom:1px dashed;border-top:0px;-moz-border-radius-topleft:0px;-moz-border-radius-topright:0px;">
Я даже не знаю надо ли с html усложнения...
 
Dragokas

Dragokas

Very kind Developer
Команда форума
Супер-Модератор
Разработчик
Клуб переводчиков
Сообщения
6,055
Реакции
5,845
Баллы
648
Нет. Не совсем.
Хочется как в отчете GetSystemInfo - т.е. главное: каждый отчет по вкладкам.
 
Кирилл

Кирилл

Команда форума
Администратор
Сообщения
13,715
Реакции
6,106
Баллы
913
Хочется как в отчете GetSystemInfo - т.е. главное: каждый отчет по вкладкам.
Безымянный.png

Этот блок является набором ссылок,к каждой ссылке прикручена картинка.
Картинки распределены по блокам.

Иконка "свойства системы"
прикручена к блоку с соответствующим названием и id.
Такую сложную страницу сгенерировать та еще задача.

Можно попроще,хотя и не так красиво.
Создаем такую страничку:
HTML:
<html>
 <head>
  <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
  <title>Тег TBODY</title>
 </head>
 <body>

  <table width="600" border="1">
   <tbody bgcolor="yellow"
align="center">
    <tr>
     <td>Сведения о системе</td>
     <td>Системный журнал</td> 
     <td>Анализ SMART</td> 
    </tr> 
<tr>
     <td>Еще один лог</td>
     <td>И еще один лог</td> 
     <td>И так далее</td> 
    </tr> 
   </tbody>
  </table> 

 </body>
 </html>
И получаем такое:
Безымянный2.png

Каждый блок является ссылкой на отчет,который составлен в виде персональной страницы,если нужно прикручиваем картинки,анкеры и прочие рюшки.
Что скажешь?
 
Гимаев Наиль

Гимаев Наиль

Активный пользователь
Сообщения
59
Реакции
98
Баллы
188
Я бы сделал так:
Сначала получил бы список служб
CMD/BATCH:
sc query | find /i "Имя_службы:" > servicelist.txt
Потом для каждой службы сделал бы запросы
CMD/BATCH:
sc queryex ИмяСлужбы
sc qc ИмяСлужбы
Полученные ответы распарсил бы и записал в одну строчку.
Получился бы csv-файл.
ЗЫ.
Данные примеры для русской локали, под английскую нужно переделывать.
 
Гимаев Наиль

Гимаев Наиль

Активный пользователь
Сообщения
59
Реакции
98
Баллы
188
Забыл добавить, что sc можно использовать в корпоративных сетях для сбора данных с соседних компьютеров.
 
Сверху Снизу