我有一个现有脚本,无法对其进行逆向工程。
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
我需要调整脚本,以便它查找“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
尝试对现有脚本进行逆向工程,但无济于事。
这个解决方案适用于很多类似的情况
@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?
在该组的最后一个键名上,我们可以根据选择触发操作 标准
正如 Compo 和 Stephan 都提到的那样,您的标准可能需要检查。指示的值在我的系统上产生了三个结果。