如何根据上一个命令的结果运行动作/命令

时间:2019-09-29 22:03:35

标签: cmd scripting driver sccm

我有一个安装驱动程序的部署,并且想提供卸载功能。

我正在利用PNPUTIL.exe工具。

我知道删除和卸载驱动程序的语法,例如:

pnputil.exe /delete-driver oem103.inf /uninstall /force

但是我的问题是oem * .inf号的指定在每台机器上都是随机的,因此我无法将.inf硬编码到命令中并每天调用它。

pnputil具有/enum-driver开关,它将为您提供DriverStore中所有驱动程序的详细信息。这些订单项中有.inf的原始名称(我可以使用的名称)以及与之关联的oem#。

所以我需要帮助的是编写一些脚本,这些脚本将枚举驱动程序将结果通过管道传递给命令,以使run /delete-drive/uninstall开关

我尝试弄乱FindFindSTR命令,但是它只返回了一行,即原始.inf的名称。我需要将与.inf原始名称关联的OEM#通过管道传递给命令。

1 个答案:

答案 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的输出是与语言相关的,但是此代码不查找单词(当然,“原始名称”除外),而是查找行号,因此它应适用于所有语言。