windows - 如何使用 wmic 命令仅从此输出获取设备 ID

标签 windows registry wmic

我正在编写一个批处理脚本,其中我必须将当前连接的 USB 设备获取到 Windows。我使用了这个命令

C:\Users\Virima>wmic path win32_usbcontrollerdevice get Dependent /format:list

它的输出是

Dependent="\\VIRIMA-009\root\cimv2:Win32_PnPEntity.DeviceID="USB\ROOT_HUB20\4&2851D18A&0""
Dependent="\\VIRIMA-009\root\cimv2:Win32_PnPEntity.DeviceID="USB\VID_8087&PID_0020\5&15BBD570&0&1""
Dependent="\\VIRIMA-009\root\cimv2:Win32_PnPEntity.DeviceID="USB\VID_0781&PID_5567\4C530001030509109324""
Dependent="\\VIRIMA-009\root\cimv2:Win32_PnPEntity.DeviceID="USBSTOR\DISK&VEN_SANDISK&PROD_CRUZER_BLADE&REV_1.00\4C530001030509109324&0""
Dependent="\\VIRIMA-009\root\cimv2:Win32_PnPEntity.DeviceID="USB\ROOT_HUB20\4&1C1548F&0""
Dependent="\\VIRIMA-009\root\cimv2:Win32_PnPEntity.DeviceID="USB\VID_8087&PID_0020\5&29432BF7&0&1""
Dependent="\\VIRIMA-009\root\cimv2:Win32_PnPEntity.DeviceID="USB\VID_147E&PID_2016\6&32FEB3AB&0&3""
Dependent="\\VIRIMA-009\root\cimv2:Win32_PnPEntity.DeviceID="USB\VID_0A5C&PID_217F\70F3953D7812""
Dependent="\\VIRIMA-009\root\cimv2:Win32_PnPEntity.DeviceID="BTH\MS_RFCOMM\7&1FB43662&0&0""
Dependent="\\VIRIMA-009\root\cimv2:Win32_PnPEntity.DeviceID="BTH\MS_BTHBRB\7&1FB43662&0&1""
Dependent="\\VIRIMA-009\root\cimv2:Win32_PnPEntity.DeviceID="BTH\MS_BTHPAN\7&1FB43662&0&2""
Dependent="\\VIRIMA-009\root\cimv2:Win32_PnPEntity.DeviceID="USB\VID_04CA&PID_0061\6&32FEB3AB&0&2""
Dependent="\\VIRIMA-009\root\cimv2:Win32_PnPEntity.DeviceID="HID\VID_04CA&PID_0061\7&B449ECA&0&0000""
Dependent="\\VIRIMA-009\root\cimv2:Win32_PnPEntity.DeviceID="USB\VID_046D&PID_C534\6&32FEB3AB&0&1""
Dependent="\\VIRIMA-009\root\cimv2:Win32_PnPEntity.DeviceID="USB\VID_046D&PID_C534&MI_00\7&1501E46C&0&0000""
Dependent="\\VIRIMA-009\root\cimv2:Win32_PnPEntity.DeviceID="HID\VID_046D&PID_C534&MI_00\8&F640D64&0&0000""
Dependent="\\VIRIMA-009\root\cimv2:Win32_PnPEntity.DeviceID="USB\VID_046D&PID_C534&MI_01\7&1501E46C&0&0001""
Dependent="\\VIRIMA-009\root\cimv2:Win32_PnPEntity.DeviceID="HID\VID_046D&PID_C534&MI_01&COL01\8&1473305E&0&0000""
Dependent="\\VIRIMA-009\root\cimv2:Win32_PnPEntity.DeviceID="HID\VID_046D&PID_C534&MI_01&COL02\8&1473305E&0&0001""
Dependent="\\VIRIMA-009\root\cimv2:Win32_PnPEntity.DeviceID="HID\VID_046D&PID_C534&MI_01&COL03\8&1473305E&0&0002""
Dependent="\\VIRIMA-009\root\cimv2:Win32_PnPEntity.DeviceID="HID\VID_046D&PID_C534&MI_01&COL04\8&1473305E&0&0003""
Dependent="\\VIRIMA-009\root\cimv2:Win32_PnPEntity.DeviceID="HID\VID_046D&PID_C534&MI_01&COL05\8&1473305E&0&0004""

我只想从输出中提取 DeviceID 并在注册表搜索中使用。 我打算这样做

REG QUERY HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\$DeviceID

任何帮助将不胜感激。

最佳答案

TL;博士:

for /f tokens^=2^ delims^=^" %A in ('wmic path win32_usbcontrollerdevice get Dependent') do @REG QUERY "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\%A"

详细信息:

WMIC.exe命令可以得到你想要的。

wmic 路径 win32_usbcontrollerdevice 获取依赖

这里真正的挑战是,当 delims 参数已经用双引号封装时,如何告诉 FOR 在双引号字符处进行定界。

FOR 期望传递给它的第二个参数包含任何 'delims''tokens''skip' 指令,用双引号括起来,有效地使所有三个指令成为一个参数。我们可以通过转义集合中的每个空格和特殊字符来创建相同的效果,而无需使用双引号 - 转义字符是插入符号({^} 字符)。转义到位,并告诉 for 在 dbl-quotes 处截断/定界行,我们就准备截断 WMIC.exe 输出。

for /f tokens^=2^ delims^=^" %A in ('wmic path win32_usbcontrollerdevice get Dependent') do @echo %A

现在只需将 'HKLM' 信息与您提到的 REG QUERY 命令混合,我们就可以进行功能齐全的调用。

for /f tokens^=2^ delims^=^" %A in ('wmic path win32_usbcontrollerdevice get Dependent') do @REG QUERY "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\%A"

关于windows - 如何使用 wmic 命令仅从此输出获取设备 ID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47071264/

相关文章:

windows - Windows 中的 PAM "session required module"等效项

linux - 在 Linux 中以编程方式修改 Windows DLL 的字符串表

c++ - 从注册表 HKEY_LOCAL_MACHINE 中删除 key

batch-file - BATCH FOR 命令中的 WMIC 调用返回无法解释的错误

windows - 使用WMIC获取用户配置文件列表时出现问题

windows - 在网页上加载 javascript 时输入意外结束

c++ - 内存不能是 "read"。 - 随机崩溃

java - 如何以编程方式添加/删除任何应用程序的 EXE

sql-server - 如何从 Windows 注册表中找到 sql server 端口号?

mysql - 如何在wql中使用concat()方法?