回复 7# 3mile
又发现个新问题,请看以下代码:For $oLink In $oLinks
;MsgBox(0, "Link Info", $oLink.href)
;地址样例:http://100.100.100/patchs/10-034/WindowsServer2003-KB980195-x86-CHS.exe
$file=StringSplit($oLink.href,"/",1)
;MsgBox(0,'第'& $j &'个'&'$file[6]',$file[6])
;对获得的补丁下载地址进行拆分,1表示按照整个分割符"/"字符串来划分,而不是一个个字符来划分
$filekb=StringSplit($file[6],"-",1)
;MsgBox(0,'第'& $j &'个'&'$filekb[2]',$filekb[2])
If IniRead($PatchsList,"已安装补丁",$filekb[2],"") = "" Then
$Num +=1; 本机未打补丁数
IniWrite($NewPatchsList,"未安装补丁",$j,$oLink.href)
EndIf
$j +=1
Next
我将所获得的页面连接地址进行拆分取得其中补丁文件名称的KB 部分在与注册表中枚举出的KB部分比较,从而希望得出不同的KB 部分,但是我发现以上通过以上代码得出的KB部分有个别是计算机已经打过的补丁,那么以上代码就执行的不是很精确?
再请看以下代码:For $i = 1 To $FileList[0]
GUICtrlCreateListViewItem($x & "|" & $FileList[$i] & "|等待安装", $ListView1);将读取到得数据写入到$ListView1
$fen = StringRegExpReplace($FileList[$i], '.*?(KB\d+)[^\d]*?.*', '$1');afan帮助写得这句话。不明白什么意思
$o = 1;表示从什么位置开始枚举已经打过的补丁数
While 1;开始判断是否已经安装过此补丁。注册表路径不知道对不对。不对的改一下就可以
$var = RegEnumKey("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\HotFix", $o)
If @error <> 0 Then ExitLoop;枚局失败退出循环
$string = StringRegExpReplace($var, '.*?(KB\d+)[^\d]*?.*', '$1');afan帮助写得这句话。不明白什么意思
If $string = $fen Then
_GUICtrlListView_SetItemText($ListView1, $x - 1, '本机已经安装', 2);如果注册表中存在此补丁的信息就修改显示的信息
ExitLoop
Else
EndIf
$o += 1
WEnd
$x += 1
Next
它使用了正则表达式,提取的不同的KB应该是很精确,但我看了半天正则表达式,还是一头雾水?能否用正则表达市纠正最上面的那段代码,如果可以的话,再就那个实例讲解一下,谢谢. |