标题: [文本处理] [已解决]禁用RAID设备的批处理执行结果和实际有出入 [打印本页]
作者: yakeyun 时间: 2023-8-22 14:22 标题: [已解决]禁用RAID设备的批处理执行结果和实际有出入
本帖最后由 yakeyun 于 2023-8-23 13:23 编辑
因为需要用这个命令来禁用RAID设备,如果不禁用自动打上驱动后会导致开机蓝屏。
先上代码:- @echo off & setlocal enabledelayedexpansion
- cd /d "%~dp0"
-
-
- ::=============================优先禁用RAID设备=============================
- for /f "tokens=1,* delims=:" %%a in ('pnputil /enum-devices /problem 28 /ids ^|findstr /n "RAID 控制器"') do (
- set lines=%%a
- set /a lines1=!lines! - 1
- echo !lines!
- echo !lines1!
- set counter=0
- for /f "tokens=1,*" %%b in ('pnputil /enum-devices /problem 28 /ids') do (
- set /a counter+=1
- if !counter! equ !lines1! (
- echo !counter!
- echo %%b
- start /min "" "%SystemRoot%\system32\pnputil.exe" /disable-device "%%c"
- )
- )
- )
- :Scan
- start /min "" "%SystemRoot%\system32\pnputil.exe" /scan-devices
- start /min "" "%SystemRoot%\system32\pnputil.exe" /scan-devices
- start /min "" "%SystemRoot%\system32\pnputil.exe" /scan-devices
- start /min "" "%SystemRoot%\system32\pnputil.exe" /scan-devices
- pause
- exit
复制代码
下面是运行结果,从运行结果可以看出,获取的变量都是对的,但是结果却是错的。
其中 if !counter! equ !lines1! 这句代码的作用是,如果当前操作的行号和目标行号一致,就输出内容。也就是"实例 ID:" 所在行信息。
作者: buyiyang 时间: 2023-8-22 15:23
因为for跳过了空行。你为什么不直接findstr "实例 ID"呢
作者: yakeyun 时间: 2023-8-22 17:09
本帖最后由 yakeyun 于 2023-8-22 17:21 编辑
回复 2# buyiyang
对于新系统来说,用这个28代码特征获取的条目比较多,一般都是3~5个左右,直接获取无法筛选:
Microsoft PnP 工具
实例 ID: PCI\VEN_8086&DEV_7AA3&SUBSYS_86941043&REV_11\3&11583659&0&FC
设备描述: SM 总线控制器
类名: 未知
类 GUID: 未知
制造商名称: 未知
状态: 问题
问题代码: 28 (0x1C) [CM_PROB_FAILED_INSTALL]
问题状态: 0xC0000490
硬件 ID: PCI\VEN_8086&DEV_7AA3&SUBSYS_86941043&REV_11
PCI\VEN_8086&DEV_7AA3&SUBSYS_86941043
PCI\VEN_8086&DEV_7AA3&CC_0C0500
PCI\VEN_8086&DEV_7AA3&CC_0C05
兼容 ID: PCI\VEN_8086&DEV_7AA3&REV_11
PCI\VEN_8086&DEV_7AA3
PCI\VEN_8086&CC_0C0500
PCI\VEN_8086&CC_0C05
PCI\VEN_8086
PCI\CC_0C0500
PCI\CC_0C05
实例 ID: PCI\VEN_10DE&DEV_1AED&SUBSYS_16407377&REV_A1\4&2e6f6d9a&0&0308
设备描述: PCI 设备
类名: 未知
类 GUID: 未知
制造商名称: 未知
状态: 问题
问题代码: 28 (0x1C) [CM_PROB_FAILED_INSTALL]
问题状态: 0xC0000490
硬件 ID: PCI\VEN_10DE&DEV_1AED&SUBSYS_16407377&REV_A1
PCI\VEN_10DE&DEV_1AED&SUBSYS_16407377
PCI\VEN_10DE&DEV_1AED&CC_0C8000
PCI\VEN_10DE&DEV_1AED&CC_0C80
兼容 ID: PCI\VEN_10DE&DEV_1AED&REV_A1
PCI\VEN_10DE&DEV_1AED
PCI\VEN_10DE&CC_0C8000
PCI\VEN_10DE&CC_0C80
PCI\VEN_10DE
PCI\CC_0C8000&DT_0
PCI\CC_0C8000
PCI\CC_0C80&DT_0
PCI\CC_0C80
实例 ID: PCI\VEN_8086&DEV_467F&SUBSYS_86941043&REV_00\3&11583659&0&70
设备描述: RAID 控制器
类名: 未知
类 GUID: 未知
制造商名称: 未知
状态: 问题
问题代码: 28 (0x1C) [CM_PROB_FAILED_INSTALL]
问题状态: 0xC0000490
硬件 ID: PCI\VEN_8086&DEV_467F&SUBSYS_86941043&REV_00
PCI\VEN_8086&DEV_467F&SUBSYS_86941043
PCI\VEN_8086&DEV_467F&CC_010400
PCI\VEN_8086&DEV_467F&CC_0104
兼容 ID: PCI\VEN_8086&DEV_467F&REV_00
PCI\VEN_8086&DEV_467F
PCI\VEN_8086&CC_010400
PCI\VEN_8086&CC_0104
PCI\VEN_8086
PCI\CC_010400&DT_9
PCI\CC_010400
PCI\CC_0104&DT_9
PCI\CC_0104
实例 ID: PCI\VEN_8086&DEV_7AA4&SUBSYS_86941043&REV_11\3&11583659&0&FD
设备描述: PCI 设备
类名: 未知
类 GUID: 未知
制造商名称: 未知
状态: 问题
问题代码: 28 (0x1C) [CM_PROB_FAILED_INSTALL]
问题状态: 0xC0000490
硬件 ID: PCI\VEN_8086&DEV_7AA4&SUBSYS_86941043&REV_11
PCI\VEN_8086&DEV_7AA4&SUBSYS_86941043
PCI\VEN_8086&DEV_7AA4&CC_0C8000
PCI\VEN_8086&DEV_7AA4&CC_0C80
兼容 ID: PCI\VEN_8086&DEV_7AA4&REV_11
PCI\VEN_8086&DEV_7AA4
PCI\VEN_8086&CC_0C8000
PCI\VEN_8086&CC_0C80
PCI\VEN_8086
PCI\CC_0C8000
PCI\CC_0C80
实例 ID: PCI\VEN_8086&DEV_7AE8&SUBSYS_86941043&REV_11\3&11583659&0&B0
设备描述: PCI 简单通讯控制器
类名: 未知
类 GUID: 未知
制造商名称: 未知
状态: 问题
问题代码: 28 (0x1C) [CM_PROB_FAILED_INSTALL]
问题状态: 0xC0000490
硬件 ID: PCI\VEN_8086&DEV_7AE8&SUBSYS_86941043&REV_11
PCI\VEN_8086&DEV_7AE8&SUBSYS_86941043
PCI\VEN_8086&DEV_7AE8&CC_078000
PCI\VEN_8086&DEV_7AE8&CC_0780
兼容 ID: PCI\VEN_8086&DEV_7AE8&REV_11
PCI\VEN_8086&DEV_7AE8
PCI\VEN_8086&CC_078000
PCI\VEN_8086&CC_0780
PCI\VEN_8086
PCI\CC_078000
PCI\CC_0780
实例 ID: ACPI\INTC1056\2&daba3ff&0
设备描述: 未知
类名: 未知
类 GUID: 未知
制造商名称: 未知
状态: 问题
问题代码: 28 (0x1C) [CM_PROB_FAILED_INSTALL]
问题状态: 0xC0000490
硬件 ID: ACPI\VEN_INTC&DEV_1056
ACPI\INTC1056
*INTC1056
实例 ID: PCI\VEN_8086&DEV_7ACC&SUBSYS_86941043&REV_11\3&11583659&0&A8
设备描述: PCI 设备
类名: 未知
类 GUID: 未知
制造商名称: 未知
状态: 问题
问题代码: 28 (0x1C) [CM_PROB_FAILED_INSTALL]
问题状态: 0xC0000490
硬件 ID: PCI\VEN_8086&DEV_7ACC&SUBSYS_86941043&REV_11
PCI\VEN_8086&DEV_7ACC&SUBSYS_86941043
PCI\VEN_8086&DEV_7ACC&CC_0C8000
PCI\VEN_8086&DEV_7ACC&CC_0C80
兼容 ID: PCI\VEN_8086&DEV_7ACC&REV_11
PCI\VEN_8086&DEV_7ACC
PCI\VEN_8086&CC_0C8000
PCI\VEN_8086&CC_0C80
PCI\VEN_8086
PCI\CC_0C8000
PCI\CC_0C80
作者: buyiyang 时间: 2023-8-22 17:32
回复 3# yakeyun
用兼容ID
作者: yakeyun 时间: 2023-8-22 18:02
回复 4# buyiyang
现有的代码是直接用的收集的所有类型,但是想做一个通用的:- :End
- start /min "" "%SystemRoot%\system32\pnputil.exe" /disable-device "PCI\VEN_8086&DEV_A77F&SUBSYS_88821043&REV_00\3&11583659&0&70"
- start /min "" "%SystemRoot%\system32\pnputil.exe" /disable-device "PCI\VEN_8086&DEV_A77F&SUBSYS_86941043&REV_00\3&11583659&0&70"
- start /min "" "%SystemRoot%\system32\pnputil.exe" /disable-device "PCI\VEN_8086&DEV_467F&SUBSYS_86941043&REV_00\3&11583659&0&70"
- start /min "" "%SystemRoot%\system32\pnputil.exe" /disable-device "PCI\VEN_8086&DEV_467F&SUBSYS_00008086&REV_00\3&11583659&0&70"
- start /min "" "%SystemRoot%\system32\pnputil.exe" /disable-device "PCI\VEN_8086&DEV_A77F&SUBSYS_86941043&REV_00\3&11583659&0&70"
- start /min "" "%SystemRoot%\system32\pnputil.exe" /disable-device "PCI\VEN_8086&DEV_467F&SUBSYS_88821043&REV_00\3&11583659&0&70"
-
- start /min "" "%SystemRoot%\system32\pnputil.exe" /scan-devices
- start /min "" "%SystemRoot%\system32\pnputil.exe" /scan-devices
- start /min "" "%SystemRoot%\system32\pnputil.exe" /scan-devices
- start /min "" "%SystemRoot%\system32\pnputil.exe" /scan-devices
复制代码
作者: Batcher 时间: 2023-8-22 22:29
回复 1# yakeyun - @echo off
- setlocal enabledelayedexpansion
- for /f "tokens=1,* delims=:" %%a in ('pnputil /enum-devices /problem 28 /ids ^| find ":"') do (
- set "ThisRow=%%b"
- if "!ThisRow:RAID 控制器=!" equ "%%b" (
- set "PreRow=%%b"
- set "PreRow=!PreRow: =!"
- ) else (
- goto :ExecDis
- )
- )
-
- :ExecDis
- echo,!PreRow!
- REM 禁用设备的代码放在下面
- pause
复制代码
作者: 986981535 时间: 2023-8-23 08:56
我使用DevCon命令成功过,要不要试试?
devcon [/r] enable {* | ID [ID ...] | =class [ID [ID ...]]}
DevCon Disable ="@ID"
作者: yakeyun 时间: 2023-8-23 09:38
本帖最后由 yakeyun 于 2023-8-23 10:48 编辑
回复 6# Batcher
管理老大的代码确实可以实现,但是其原理有些看不懂。不是很理解是怎么实现找到上一行信息的,希望老大可以帮忙解释一下,或者能提供相关方面的教程学习提升一下。
执行结果:
作者: yakeyun 时间: 2023-8-23 13:20
回复 7# 986981535
这个属于调用第三方应用,不过也是要获取到“实例ID”才能执行。
作者: Batcher 时间: 2023-8-23 16:44
回复 8# yakeyun - @echo off
- setlocal enabledelayedexpansion
- REM 只查找包含冒号的行
- for /f "tokens=1,* delims=:" %%a in ('pnputil /enum-devices /problem 28 /ids ^| find ":"') do (
- REM 当前行的值保存到临时变量ThisRow里面
- set "ThisRow=%%b"
- if "!ThisRow:RAID 控制器=!" equ "%%b" (
- REM 如果当前行不包含待查找的关键字,把当前行的值保存到结果变量PreRow里面
- set "PreRow=%%b"
- set "PreRow=!PreRow: =!"
- ) else (
- REM 如果当前行包含待查找的关键字,跳出循环
- REM 结果变量PreRow的值保存的仍然是关键字所在行的上一行
- goto :ExecDis
- )
- )
-
- :ExecDis
- echo,!PreRow!
- REM 禁用设备的代码放在下面
- pause
复制代码
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |