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

Тема в разделе "Пакетные файлы CMD, BAT", создана пользователем Kиpилл, 19 янв 2014.

  1. Kиpилл
    Оффлайн

    Kиpилл Команда форума Администратор

    Лучший автор месяца

    Сообщения:
    12.232
    Симпатии:
    4.980
    Привет.

    Собрал такой скрипт:
    Код ( (Unknown Language)):
    @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
     
    Но поиск ничего не дает.
    Как задать поиск по двум строкам?
     
  2. Dragokas
    Оффлайн

    Dragokas Very kind Developer Команда форума Супер-Модератор Разработчик Клуб переводчиков

    Сообщения:
    4.497
    Симпатии:
    4.312
    Koza Nozdri, попробуй так:

    Код (Text):
    type "%~dp01.reg" | findstr /b /i /o "[HKEY_LOCAL_MACHINE \"start"
     
    Kиpилл нравится это.
  3. Kиpилл
    Оффлайн

    Kиpилл Команда форума Администратор

    Лучший автор месяца

    Сообщения:
    12.232
    Симпатии:
    4.980
    Получил называется)
    Теперь требуется все переделывать...
    короче совет нужен,раньше я это делал в Notepad++ но убей не помню как.
    допустим имею экспорт раздела с сервисами,хочу создать рег файл с параметрами запуска сервисов.
    Для этого нужно отсеить те строки,в которых содержится параметр start между HKEY_LOCAL_MACHINE,если параметра нет то строка не пропускается
    пример:
    Код (Text):
    [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\3ware]

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

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

    Скажем выполнить поиск reg query а нужные строки переписать?
    --- Объединённое сообщение, 19 янв 2014, Дата первоначального сообщения: 19 янв 2014 ---
    Код (Text):
    reg query HKLM\SYSTEM\CurrentControlSet\Services /v start /s
    получаем:
    Код (Text):

    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\ заключить в квадратные скобки
    а
    Код (Text):
    Start    REG_DWORD    0x3
    преобразовать в
    Код (Text):
    "Start"=dword:00000003
    кажется так уже реальнее становится.
    Что скажете?
     
  4. Dragokas
    Оффлайн

    Dragokas Very kind Developer Команда форума Супер-Модератор Разработчик Клуб переводчиков

    Сообщения:
    4.497
    Симпатии:
    4.312
    Фильтровать батниками не так просто.
    Этот вариант будет глотать знаки (!), если таковые имеются в имени службы:

    Код (Text):
    @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
     
    Kиpилл нравится это.
  5. Dragokas
    Оффлайн

    Dragokas Very kind Developer Команда форума Супер-Модератор Разработчик Клуб переводчиков

    Сообщения:
    4.497
    Симпатии:
    4.312
    Так что - будешь как-то улучшать процедуру или этого скрипта будет достаточно?
    Обрати внимание: файл не до конца фильтруется. Туда попадают некоторые подразделы, у которых только параметр "Type".
    Я обращаю твое внимание на этот параметр, т.к. это очень важно для отладки проблем.
    Читай в этой статье про то, какие службы исключаются из загрузки в Безопасном режиме.

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

    Kиpилл Команда форума Администратор

    Лучший автор месяца

    Сообщения:
    12.232
    Симпатии:
    4.980
    Да.
    Но цель не одна.
    Первым делом - получаю эталон,который добавлю в эту тему
    Второе - да,получение списка служб в разнице при вариантах загрузке,а так же сравнение на живой ос с эталоном.
    Это будет нужно для сбора лога в этой теме

    Далее так как не могу повторить поиск в своем редакторе,то нужно научиться делать это иначе.
    Так как эталоны будут не только для служб,но и для некоторых других важных настроек.
    --- Объединённое сообщение, 20 янв 2014, Дата первоначального сообщения: 20 янв 2014 ---
    Я что подумал.
    Можно не мудрить а в тот вариант что имеется при поиске добавить поиск строки:
    (тока как экранировать кавычки? згаком ^ ?)
    И тупо выполнить ее замену на заготовленный шаблон?
    Всего четыре вида строк и четыре шаблона,не так много.
    --- Объединённое сообщение, 20 янв 2014 ---
    Думаю не имеем мы права на ошибку)
    Еще по соображаю,может ты что подскажешь.
     
    Последнее редактирование: 20 янв 2014
  7. Dragokas
    Оффлайн

    Dragokas Very kind Developer Команда форума Супер-Модератор Разработчик Клуб переводчиков

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

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

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

    Раз уж:
    то язык VBScript с использованием WMI
     
  8. Kиpилл
    Оффлайн

    Kиpилл Команда форума Администратор

    Лучший автор месяца

    Сообщения:
    12.232
    Симпатии:
    4.980
    А вручную и не трэба)
    Я по лузерски имею метод.
    Сравнение с выводом разницы.
    На автомате будет здорово,но ексель не знаю стоит ли - далеко не на каждом компе есть.
    По остальному абсолютно согласен)
    Ладно,буду готовить эталоны.
     
  9. Dragokas
    Оффлайн

    Dragokas Very kind Developer Команда форума Супер-Модератор Разработчик Клуб переводчиков

    Сообщения:
    4.497
    Симпатии:
    4.312
    При чем здесь?
    Можешь и не открывать файл базы данных.
    Думаю, формат отчета GetCPUUsage видел. Это тоже самое.
    БД только утилите-анализатору нужна. Там все просто. Одна строка базы парсится на массив одной командой: arr = split(line,";")
    Я Excel привел как пример программы, которой можно увидеть содержимое базы (и то если захочется) + форму самого отчета,
    если ты не предложить более лучший вариант с HTML-логом. Как ты знаешь, с HTML я заморачиваться не буду.
    Разве что ты (или помощники) составят нужный шаблон под отчет.
     
    Kиpилл нравится это.
  10. Kиpилл
    Оффлайн

    Kиpилл Команда форума Администратор

    Лучший автор месяца

    Сообщения:
    12.232
    Симпатии:
    4.980
    А,все понял.
    Нормально и в блокноте смотрится.
    Под шаблоном ты что то типа этого подразумеваешь?
    Код (HTML5):
    <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 усложнения...
     
  11. Dragokas
    Оффлайн

    Dragokas Very kind Developer Команда форума Супер-Модератор Разработчик Клуб переводчиков

    Сообщения:
    4.497
    Симпатии:
    4.312
    Нет. Не совсем.
    Хочется как в отчете GetSystemInfo - т.е. главное: каждый отчет по вкладкам.
     
  12. Kиpилл
    Оффлайн

    Kиpилл Команда форума Администратор

    Лучший автор месяца

    Сообщения:
    12.232
    Симпатии:
    4.980
    Безымянный.png

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

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

    Можно попроще,хотя и не так красиво.
    Создаем такую страничку:
    Код (HTML5):

    <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

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

    Dragokas Very kind Developer Команда форума Супер-Модератор Разработчик Клуб переводчиков

    Сообщения:
    4.497
    Симпатии:
    4.312
    А сложнее и не нужно.
     
    Kиpилл нравится это.
  14. Гимаев Наиль
    Оффлайн

    Гимаев Наиль Пользователь

    Сообщения:
    59
    Симпатии:
    98
    Я бы сделал так:
    Сначала получил бы список служб
    Код (DOS):
    sc query | find /i "Имя_службы:" > servicelist.txt
    Потом для каждой службы сделал бы запросы
    Код (DOS):
    sc queryex ИмяСлужбы
    sc qc ИмяСлужбы
     
    Полученные ответы распарсил бы и записал в одну строчку.
    Получился бы csv-файл.
    ЗЫ.
    Данные примеры для русской локали, под английскую нужно переделывать.
     
    Kиpилл нравится это.
  15. Гимаев Наиль
    Оффлайн

    Гимаев Наиль Пользователь

    Сообщения:
    59
    Симпатии:
    98
    Забыл добавить, что sc можно использовать в корпоративных сетях для сбора данных с соседних компьютеров.
     

Поделиться этой страницей