Batch file 将reg查询输出作为单行处理
我想以单行(每个键一行)格式从Windows注册表中获取一些详细信息。但到目前为止,我所尝试的方法提供了我想要的细节,但是分割成2/3行,这使得后期处理更加困难 这是在Windows10上 一个选项是查询注册表,因此我运行以下操作: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 .....
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循环可用于将注册表项和设备描述字符串值连接在一行上,以便输出。接下来可以使用命令FINDSTR对FOR循环的整个输出进行过滤,以获得感兴趣的设备描述:
@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