如何使用wmic命令仅从此输出获取DeviceID

时间:2017-11-02 09:04:15

标签: 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`

任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:0)

TL; DR:

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 path win32_usbcontrollerdevice get Dependent

这里的真正挑战是,当FOR参数已经用dbl引号引起来时,如何告诉delims来分隔dbl引号。

FOR期望传递给它的第二个参数包含任何“ delims”,“ tokens”和“ skip”指令,并用双引号引起来,从而使所有三个参数成为单个参数。通过转义集合中的每个空格和特殊字符,我们可以创建不带dbl引号的相同效果-转义字符是插入符号({^}字符)。有了转义符,并告诉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"