如何根据上一个命令的结果 运行 一个 action/command

How to run an action/command based on a result of a previous command

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

我正在利用 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# 通过管道传输到命令。

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 的输出依赖于语言,但此代码不查找单词(当然 "Original name" 除外)而是查找行号,因此它应该适用于所有语言。