如果固件版本将从11.500.11.13升级到11.500.12.13,我会编写一个示例批处理文件以将系统信息和固件版本转储到“result.txt”中 或11.500.15.13,然后,我需要检查是遵循该规则。 如何编辑以下批处理文件?
@echo off
>"info.txt" systeminfo.exe
>"log.txt" netsh mbn show interfaces
>"result.txt" (
findstr /l /i /c:"System Model:" /c:"OS Version" "info.txt"
findstr /l /i /c:"Model" /c:"Firmware Version" "log.txt"
)
del/f "info.txt" "log.txt"
答案 0 :(得分:0)
您还没有告诉我们Firmware Version
行的格式或您的版本号是否包含前导零。
假设您的版本号为
形式xxxx固件版本11.500.11.13
并且您的编号方案不包括前导零,那么
@ECHO OFF
SETLOCAL
SET "sourcedir=U:\sourcedir"
SET "filename1=%sourcedir%\q43404681.txt"
SET "filename2=%sourcedir%\q43404681_2.txt"
FOR /f "delims=" %%a IN ('FINDSTR /i /L /c:"Firmware Version" "%filename1%"') DO SET "firmware=%%a"
FOR /f "tokens=1-4delims=." %%a IN ("%firmware:*Firmware Version=%") DO (
FOR /f "usebackqtokens=1-4delims=." %%p IN ("%filename2%") DO (
SET "newer="
IF %%p gtr %%a SET "newer=Y"
IF %%p equ %%a IF %%q gtr %%b SET "newer=Y"
IF %%p equ %%a IF %%q equ %%b IF %%r gtr %%c SET "newer=Y"
IF %%p equ %%a IF %%q equ %%b IF %%r equ %%c IF %%s gtr %%d SET "newer=Y"
IF DEFINED newer ECHO Upgrade: %%p.%%q.%%r.%%s
)
)
GOTO :EOF
您需要更改sourcedir
的设置以适合您的具体情况。
我使用了一个名为q43404681.txt
的文件,其中包含一些虚拟数据供我测试。
我使用了一个名为q43404681_2.txt
的文件,其中包含我的测试数据(可用软件版本列表)
11.500.11.10
11.500.11.13
11.500.11.15
11.500.12.7
11.500.12.13
11.500.15.9
11.500.15.13
11.511.1.1
12.100.6.22
显示了这个结果:
升级:11.500.11.15
升级:11.500.12.7
升级:11.500.12.13
升级:11.500.15.9
升级:11.500.15.13
升级:11.511.1.1
升级:12.100.6.22
隔离Firmware version
中的firmware
行后,我们可以使用firmware version
子字符串运算符删除字符串:*
和任何前面的字符。然后,我们使用.
作为分隔符,并选择4个结果标记到%%a
.. %%d
。
%%p
%%s
的可用选项列表的参数完全相同;然后简单地使用层次结构比较版本号和xxx
if-operator特征,以数字方式比较所有数字参数而不是按字母顺序。变量newer
用作标记,如果if
检测到更高版本,则会在读取每个可用版本时将其清除并设置为值(它不重要的值) logic`。
if defined
指令对变量的运行时值进行操作,因此任何newer
命令都设置了if
,再现了升级行。
@ECHO Off
SETLOCAL
SET "sourcedir=U:\sourcedir"
SET "filename1=%sourcedir%\q43404681.txt"
SET "filename2=%sourcedir%\q43404681_2.txt"
REM ^^^^^^ These lines simply set up the filenames to be used
FOR %%a IN (osversion,systemmodel,biosversion,model,firmwareversion) DO SET "#%%a="
REM now we have cleared the variables to be used all of which begin "#"
FOR /f "delims=" %%a IN ('type "%filename1%"') DO (
FOR /f "tokens=1,2,* delims=: " %%p IN ("%%a") DO (
IF "%%p%%q"=="OSVersion" SET "#osversion=%%r"
IF "%%p%%q"=="SystemModel" SET "#systemmodel=%%r"
IF "%%p%%q"=="BIOSVersion" SET "#biosversion=%%r"
IF "%%p%%q"=="FirmwareVersion" SET "#firmwareversion=%%r"
IF "%%p"=="Model" FOR /f "tokens=1,* delims=: " %%v IN ("%%a") DO SET "#model=%%w"
)
)
SET #
REM This should have extracted the required data fields
REM The last "SET" is simply to display their values and can be deleted
REM You can now display whatever of these values you choose.
REM IF "filename2" contains a list of the possible firmware versions
REM available as in the list "11.500.11.10" to "12.100.6.22"
REM then this following routine should show all available versions
REM which are newer than the version installed according to your report
FOR /f "tokens=1-4delims=." %%a IN ("%#firmwareversion%") DO (
FOR /f "usebackqtokens=1-4delims=." %%p IN ("%filename2%") DO (
SET "newer="
IF %%p gtr %%a SET "newer=Y"
IF %%p equ %%a IF %%q gtr %%b SET "newer=Y"
IF %%p equ %%a IF %%q equ %%b IF %%r gtr %%c SET "newer=Y"
IF %%p equ %%a IF %%q equ %%b IF %%r equ %%c IF %%s gtr %%d SET "newer=Y"
IF DEFINED newer ECHO Upgrade: %%p.%%q.%%r.%%s
)
)
GOTO :EOF
也许您应该使用谷歌翻译将上述程序中的备注转换为您的语言。例如,第一个块转换为
IF" filename2"には,使用可能なファームウェアのバージョンのリストが含まれています リスト「11.500.11.10」から「12.100.6.22」のように利用可能 この次のルーチンは利用可能なすべてのバージョンを表示する必要があります あなたのレポートに従ってインストールされたバージョンより新しい
或
如果“文件名2”包含可能的固件版本列表 可用于“11.500.11.10”至“12.100.6.22” 那么以下例程应显示所有可用的版本 它们比根据您的报告安装的版本更新
(对不起 - 对我来说看起来像中国人 - 我无法区分)