我有一个安装驱动程序的部署,并且想提供卸载功能。
我正在利用PNPUTIL.exe工具。
我知道删除和卸载驱动程序的语法,例如:
pnputil.exe /delete-driver oem103.inf /uninstall /force
但是我的问题是oem * .inf号的指定在每台机器上都是随机的,因此我无法将.inf硬编码到命令中并每天调用它。
pnputil具有/enum-driver
开关,它将为您提供DriverStore中所有驱动程序的详细信息。这些订单项中有.inf的原始名称(我可以使用的名称)以及与之关联的oem#。
所以我需要帮助的是编写一些脚本,这些脚本将枚举驱动程序将结果通过管道传递给命令,以使run /delete-drive
和/uninstall
开关
我尝试弄乱Find
和FindSTR
命令,但是它只返回了一行,即原始.inf的名称。我需要将与.inf原始名称关联的OEM#通过管道传递给命令。
答案 0 :(得分:0)
在pnputil
的输出中,所需的oemXX.inf
在原始名称上方一行。
因此,对输出进行编号,查找原始名称,然后从行号中减去一个。这是找到oemXX.inf的行号。
然后找到该行并提取oemXX
字符串。 (for %%b
是要删除前导空格)
@echo off
setlocal
set "Orig=rt640x64.inf"
pnputil /enum-drivers |findstr /n "^" > pnputil.txt
for /f "delims=:" %%a in ('findstr /c:" %Orig%" pnputil.txt') do set /a line=%%a-1
for /f "tokens=3 delims=:" %%a in ('findstr /b "%line%:" pnputil.txt') do for %%b in (%%a) do set "oem=%%b"
echo "%oem%"
注意:pnputil
的输出是与语言相关的,但是此代码不查找单词(当然,“原始名称”除外),而是查找行号,因此它应适用于所有语言。