问题: 有什么方法可以仅解析Windows systeminfo命令报告中的修补程序KB条目。
背景: 我有许多Windows系统需要从中获取已安装KB的列表。我无法在系统上安装任何软件,所以我决定使用批处理文件。
我希望有一个KB列表作为输出,并保存到文件“ .txt”中。
我当前的方法: 到目前为止,我可以从systeminfo获取完整列表,并将整个输出放入带有设备的主机名和日期的文本文件中,并将其粘贴到名为Systeminfo Saves的目录中。这对我来说已经足够好了,但是我真的只对KB感兴趣,我希望使用该输出将其与经过验证的KB列表进行比较,这样我就可以获得需要安装的KB列表。
我一直在使用for语句,标记和定界符来将列表缩小到仅KB文件,但是没有成功。
这是我当前的代码:
@echo off
REM Get date and host and set it to sFileName
REM -----------------------------------------
setlocal enabledelayedexpansion
set ssDate=%date%
set sHost=%computername%
set sDate=!ssDate:/=-!
REM Remove the day of the week
set sDate=%sDate:~-10%
set sFileName=%sHost% %sDate%.txt
REM -----------------------------------------
REM - Save system info to hostname and date -
REM -----------------------------------------
systeminfo > "Systeminfo Saves/%sFileName%"
REM
REM PUT FOR STATEMENT HERE FOR OUTPUT OF JUST KBs
REM -----------------------------------------
我无法完成的下一步是将已安装的KB解析为文件。
For语句使我陷入混乱(双关语是故意的)。我已经尝试过了:
REM OUTPUT a list of KBs
SET count=1
set lookieloo = "]: KB"
FOR /F "tokens=* USEBACKQ" %%F IN (`systeminfo`) DO (
SET var!count!=%%F
SET /a count=!count!+1
REM See if "]: KB" is in the resultant string
if not x%%F:"]: KB"=%==x%%F echo %%F >> "Systeminfo Saves/%sFileName%"
)
我将无法从其他部分回答我问题的Stack Overflow答案中完全理解的答案拼接在一起。
我敢肯定最后一次保存到文件将不起作用 。 “]:KB”根本不起作用。我尝试使用变量lookieloo来使该语句起作用。我没有收到错误,但也没有得到KB列表。
因此,问题是:使用systeminfo命令在系统上导出已安装KB的文本文件时,批处理程序会是什么样子?
答案 0 :(得分:0)
从LotPings的评论中,我能够编写一个完整的程序,该程序可以仅使用批处理来提取已安装的KB。
@setlocal enableextensions enabledelayedexpansion
@echo off
REM Get date and host and set it to sFileName
REM -----------------------------------------
set ssDate=%date%
set sHost=%computername%
REM Get the directory and make it if it doesn't exist
set sDir=Systeminfo Saves
if not exist "%sDir%\" mkdir "%sDir%\"
set sDate=!ssDate:/=-!
REM Remove the day of the week
set sDate=%sDate:~-10%
REM Compile the full file name with directory
set sFileName=%sDir%^\%sHost% %sDate%.txt
REM -----------------------------------------
echo %sFileName%
REM -- Extract KB information and save to file --
(For /f "tokens=2delims=: " %%A in ('systeminfo^|findstr "\[[0-9][0-9]*\]:.KB[0-
9]*"') Do @Echo:%%A)>"%sFileName%"
REM ---------------------------------------------
答案 1 :(得分:0)
加载和解析SystemInfo
是一项耗时的操作,虽然确定更新可能需要花费一些时间,但使用WMI可能是一种更快的方法。
这是使用WMIC
的替代方法:
@Echo Off
SetLocal EnableExtensions DisableDelayedExpansion
Set "sDir=WMIC Saves"
Set "sDate=%DATE:/=-%"
Set "sDate=%sDate:~-10%"
Set "sFileName=%sDir%\%COMPUTERNAME% %sDate%.txt"
If Not Exist "%sDir%\" MD "%sDir%" 2>Nul || Exit /B
(For /F "EOL=H Tokens=*" %%A In ('"WMIC QFE Get HotFixID|Sort"'
) Do For /F "Tokens=*" %%B In ("%%A") Do Echo=%%B)>"%sFileName%"