我正在编写一个批处理脚本,其中我必须将当前连接的 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/