Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Batch file 将reg查询输出作为单行处理_Batch File_Registry - Fatal编程技术网

Batch file 将reg查询输出作为单行处理

Batch file 将reg查询输出作为单行处理,batch-file,registry,Batch File,Registry,我想以单行(每个键一行)格式从Windows注册表中获取一些详细信息。但到目前为止,我所尝试的方法提供了我想要的细节,但是分割成2/3行,这使得后期处理更加困难 这是在Windows10上 一个选项是查询注册表,因此我运行以下操作: reg query hklm\system\currentcontrolset\enum/s/f“DeviceDesc” 这将提供以下格式的输出(代码段): 格式为: BLANK LINE HKEY_LOCAL..... DeviceDesc .....

我想以单行(每个键一行)格式从Windows注册表中获取一些详细信息。但到目前为止,我所尝试的方法提供了我想要的细节,但是分割成2/3行,这使得后期处理更加困难

这是在Windows10上

一个选项是查询注册表,因此我运行以下操作:

reg query hklm\system\currentcontrolset\enum/s/f“DeviceDesc”

这将提供以下格式的输出(代码段):

格式为:

BLANK LINE
HKEY_LOCAL.....
    DeviceDesc .....
我想要的是
HKEY_LOCAL…
DeviceDesc
显示在输出文本的同一行上,以便我可以使用
FIND/FINDSTR
获取我感兴趣的设备的完整信息

就目前的输出而言,我无法使用DOS命令将这两条信息组合在一起

有没有办法使DeviceDesc显示在同一行中


我可以为此编写Java/C,但这似乎有些过分。

命令REG没有定义输出格式的选项

FOR循环可用于将注册表项和设备描述字符串值连接在一行上,以便输出。接下来可以使用命令FINDSTRFOR循环的整个输出进行过滤,以获得感兴趣的设备描述:

@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/?
  • 设置/?
  • setlocal/?

据我所知,您希望将每行
关键路径
数据
组合在一起。据我所知,最简单的方法是获取
FOR
循环的每个结果,并使用
IF
语句设置我们稍后将组合的字符串

下面您将找到脚本-在我的例子中,我只是将结果输出到一个文档中。这很好,以后可以在FOR
中使用
TYPE
语句调用。但是,如果您想在循环中处理这些变量,只需继续您的代码而不是
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

您对哪种设备感兴趣?@Compo。。这是我想要的第三个<代码>HKEY\U LOCAL\U MACHINE\system\currentcontrolset\enum\HID\VID\U 2149&PID\U 2117&MI\U 00\7&1e3fba77&0&0000
这确实是一个不完整的响应,不能帮助我们帮助您。您是否试图查找与触摸屏有关的按键和/或数据,或任何人的PC第三次返回的内容。您具体需要什么,按键、值或数据或一个或多个按键的组合。例如,您是否正在尝试解析数据以确定inf文件的名称?你的问题是你将处理响应,那么你到底想处理什么?@Compo,我运行一个命令,它在不同的行上给我两条信息。我可以搜索第二条信息,但是我的问题是包含第一条信息的对应行。在帮助方面,问题的实质是将两行文本连接成一行,其中第1行以“
”^HKEY\U LOCAL“
”开头,第2行是下一行。那么,您是否有任何特殊值会在两段代码的输出中同时存在?然后,您可以使用
for/f
循环。e、 g.
for/f“delims=”%A IN('reg query hklm\system\currentcontrolset\enum/s/f“DeviceDesc”^ findstr/c:7&1e3fba77&0&0000')是否设置第一行=%A
和另一行:
for/f”令牌=*delims=“%B IN('reg query hklm\system\currentcontrolset\enum/s/f“DeviceDesc”^ findstr/c:'触摸屏“)设置第二行=%%B
。然后,
set combined=%first\u line%%second\u line%
echo
结果与
echo%合并%
@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