Обработка результатов запроса reg в виде одной строки - PullRequest
0 голосов
/ 28 декабря 2018

Я хочу получить некоторые подробности из реестра Windows в формате одной строки (по одному на ключ).Но то, что я пробовал до сих пор, дает мне детали, которые я хочу, но разбить на 2/3 строки, что затрудняет постобработку.

Это в Windows 10.

Один из вариантов -запросить реестр, поэтому я запускаю следующее:

reg query hklm\system\currentcontrolset\enum /s /f "DeviceDesc"

Это дает мне вывод в следующем формате (фрагмент):

HKEY_LOCAL_MACHINE\system\currentcontrolset\enum\HID\VID_1A2C&PID_2124&MI_01&Col02\7&2a45f711&0&0001
    DeviceDesc    REG_SZ    @input.inf,%hid_device_system_control%;HID-compliant system controller

HKEY_LOCAL_MACHINE\system\currentcontrolset\enum\HID\VID_1A2C&PID_2124&MI_01&Col02\8&9a82e8&0&0001
    DeviceDesc    REG_SZ    @input.inf,%hid_device_system_control%;HID-compliant system controller

HKEY_LOCAL_MACHINE\system\currentcontrolset\enum\HID\VID_2149&PID_2117&MI_00\7&1e3fba77&0&0000
    DeviceDesc    REG_SZ    @input.inf,%hid_device_touch_screen%;HID-compliant touch screen

HKEY_LOCAL_MACHINE\system\currentcontrolset\enum\HID\VID_2149&PID_2117&MI_01\7&316fd6b5&0&0000
    DeviceDesc    REG_SZ    @input.inf,%hid_device_vendor_defined_range%;HID-compliant vendor-defined device

HKEY_LOCAL_MACHINE\system\currentcontrolset\enum\HID\VID_24AE&PID_2003&MI_00\8&456ad84&0&0000
    DeviceDesc    REG_SZ    @keyboard.inf,%hid.keyboarddevice%;HID Keyboard Device

Формат:

BLANK LINE
HKEY_LOCAL.....
    DeviceDesc .....

Я хочу, чтобы HKEY_LOCAL... и DeviceDesc отображались в одной строке выходного текста, чтобы я мог использовать FIND/FINDSTR для получения полной информации об интересующем меня устройстве.in.

С выводом, как он есть, я не могу собрать две части информации вместе с помощью команд DOS.

Есть ли способ заставить DeviceDesc отображаться на одной строке?

Я мог бы написать для этого Java / C #, но это кажется излишним.

Ответы [ 2 ]

0 голосов
/ 28 декабря 2018

Из того, что я понимаю, вы хотите объединить каждую строку Key Path & Data.Самый простой способ сделать это (насколько мне известно) - захватить каждый результат цикла FOR и использовать оператор IF, чтобы задать строки, которые мы будем позже комбинировать.

Ниже вы найдете скрипт- В моем случае я просто вывел результаты в документ.Это нормально и может быть вызвано позже с помощью оператора TYPE внутри FOR. Однако , если вы хотите что-то сделать с этими переменными в цикле, просто продолжите свой код вместо ECHO [!Location! !Data!] >> Output.txt.

@ECHO OFF
@setlocal EnableDelayedExpansion

Set "RUN=0"
for /F "tokens=*" %%A in ('reg query hklm\system\currentcontrolset\enum /s /f "DeviceDesc"') DO (

    Rem | Grab & organize output variables to string.
    If "!RUN!"=="1" (

        Rem | Second Cycle
        Set "Data=%%A"
        ECHO !Location! !Data! >> Output.txt

        Rem | Restart Cycle
        Set "Data="
        Set "Location="
        Set "RUN=0"

    ) ELSE (

        Rem | First Cycle
        Set "Location=%%A"

        Set "RUN=1"
    )
)

Goto :EOF
0 голосов
/ 28 декабря 2018

Команда REG не имеет опций для определения формата вывода.

A FOR цикл может использоваться для объединения ключа реестра и значения строки описания устройства длявывод в одну строку.Весь вывод цикла FOR можно затем отфильтровать с помощью команды FINDSTR для описания интересующего устройства:

@echo off
setlocal EnableExtensions EnableDelayedExpansion
(for /F "tokens=1,2*" %%A in ('%SystemRoot%\System32\reg.exe query HKLM\System\CurrentControlSet\enum /s /f "DeviceDesc"') do if /I not "%%A" == "DeviceDesc" (set "RegKey=%%A") else echo !RegKey!    %%C) | %SystemRoot%\System32\findstr.exe /I /L /C:"HID-compliant touch screen"
endlocal

Обратите внимание, что ключи реестра или значения описания, содержащиеодин или несколько ! некорректно обработаны этим пакетным кодом из-за включенного отложенного расширения переменной среды.

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

Для понимания используемых команд и их работы откройте окно командной строки, выполните там следующие команды и полностью прочитайте все страницы справки, отображаемые длякаждая команда очень тщательно.

  • echo /?
  • endlocal /?
  • findstr /?
  • reg /?
  • reg query /?
  • set /?
  • setlocal /?
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...