在Windows命令pnputil中查找驱动程序的oem编号并删除驱动程序包的批处理脚本

问题描述 投票:0回答:1

我有一个现有脚本,无法对其进行逆向工程。

  1. 该脚本运行 Windows 命令和 pnputil -e(参见下面的结果)
Published name :            oem41.inf
Driver package provider :   HID Global
Class :                     Smart card readers
Driver date and version :   12/13/2016 1.0.0.2
Signer name :               HID Global Corporation
  1. 然后它会查找上面的一行来识别 .inf 文件
  2. 然后运行命令 pnputil -f -d oem41.inf 删除驱动程序包。

我需要调整脚本,以便它查找“12/13/2016 1.0.02”,然后识别第三行,即 oem41.inf,以便可以发送命令 pnputil -f -d oem41.inf。

这是现有代码的副本。

@echo off&color e
setlocal EnableDelayedExpansion


Echo.&Echo.

for /F "tokens=2 delims=:" %%a in ('pnputil -e') do for /F "tokens=*" %%b in ("%%a") do (
   if "%%b" equ "HID Global" (
        echo pnputil -f -d !line1prior!
    pnputil -f -d !line1prior!
   ) else (
      set "line1prior=%%b"
   )
)

for /F "tokens=2 delims=:" %%c in ('pnputil -e') do for /F "tokens=*" %%d in ("%%c") do (
   if "%%d" equ "HID Global" (    
      echo pnputil -f -d !line1prior!
    pnputil -f -d !line1prior!
   ) else (
      set "line1prior=%%d"
   )
)

Echo.&Echo.
REM echo == Press button to exit ==&pause>nul

尝试对现有脚本进行逆向工程,但无济于事。

batch-file cmd
1个回答
0
投票

这个解决方案适用于很多类似的情况

@ECHO OFF
SETLOCAL ENABLEDELAYEDEXPANSION

FOR /f "tokens=1*delims=:" %%b IN ('pnputil -e') DO (
 FOR /f "tokens=*delims= " %%e IN ("%%c") DO (
  rem criterion 1
  IF "%%b"=="Published name " (
   FOR  /F "delims==" %%e In ('set key 2^>Nul') DO SET "%%e="
   SET "key1=%%e"
  )
  rem criterion 2
  IF "%%b"=="Driver date and version " (
   SET "key2=%%e"
  )
  rem criterion n
  IF "%%b"=="Signer name " (
   IF "!key2!"=="09/26/2022 2.19.1.0" ECHO found !key1! with date/version !key2!
  )
 )
)

外循环使用

%%b
作为分隔符将键分配给
%%c
,将数据分配给
:

内部循环删除

%%c
中的前导空格,并将剩余部分分配给
%%e

第一个标准清除分配给名称以

key
开头的变量的值,然后将找到的值分配给
key1
。请注意,
key
部分包含终止空格,因为该行的第一个标记具有终止空格。

然后可以选择任意数量的标准并将其分配给变量

key?

在该组的最后一个键名上,我们可以根据选择触发操作 标准

正如 CompoStephan 都提到的那样,您的标准可能需要检查。指示的值在我的系统上产生了三个结果。

© www.soinside.com 2019 - 2024. All rights reserved.