我正在编写批处理文件以开始进行自动固件检查

时间:2017-04-14 03:13:18

标签: batch-file

如果固件版本将从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" 

1 个答案:

答案 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” 那么以下例程应显示所有可用的版本 它们比根据您的报告安装的版本更新

(对不起 - 对我来说看起来像中国人 - 我无法区分)