[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖
本帖最后由 tmplinshi 于 2014-11-28 05:06 编辑

用 AutoHotkey 写了下。加我 QQ 1316882711 详谈。
下载地址: http://pan.baidu.com/s/1sjJOVQt
源码:
;-----------------------------------------
/*
[config]
ahk_version=Unicode
icon=
bin=
*/

;@Ahk2Exe-SetVersion 1.0.0.0
;-----------------------------------------
#NoEnv
#NoTrayIcon
#SingleInstance Force
SetWorkingDir %A_ScriptDir%
SetBatchLines -1
ListLines Off

gui_title := "提取评估报告 v1.00"

; 命令行参数
;
If 1 in /?,-h,--help
{
        MsgBox, % "用法: " A_ScriptName " [-dir html目录] [-o 输出文件]"
        ExitApp
}

arg   := ParamToObj()
arg.o := (arg.o = "") ? "评估报告_最终结果.xls" : arg.o

; 开始提取
;
FinalResult := "序号        IP地址        操作系统        检查分数        主机是否达标        基线项         风险等级        检查点        实际值        标准值        配置方法        结果`r`n"
global indexCount := 0

SetWorkingDir, % arg.dir
Loop, *.html
{
        ExtractInfo(A_LoopFileFullPath, result)
        FinalResult .= result
}

; 保存结果
FileOpen(arg.o, "w").Write(FinalResult)
MsgBox, 处理完毕!
Return

; ==============================================================================================
ExtractInfo(HtmlFile, ByRef ResultTable) {
        ResultTable := ""

        ; 以 UTF-8 编码读取 html 文件内容
        FileRead, data, % "*P65001 " HtmlFile

        ; 提取 IP地址、操作系统、检查分数
        RegExMatch(data, "i)IP地址</th><td>(.*?)<.*?配置模板</th><td>(\w+).*?安全评估分</th><td>(.*?)<", m)
        devInfo := m1 A_Tab m2 A_Tab m3 A_Tab ( m3>=95 ? "达标" : "不达标" )

        ; 将搜索范围缩小至“2.检查结果”
        RegExMatch(data, "2\.检查结果</div>.*?3\.辅助信息检查结果</div>", data)

        ; 取得所有红色的“基线项”的出现位置
        posList  := [], startPos := 1
        s := "<tr class='unaccord'><td colspan='1' rowspan='1' width='100px'>"
        While, pos := InStr(data, s,, startPos)
                startPos := pos + StrLen(s), posList.Insert(startPos)

        ; 取得每个红色“基线项”下面的红色信息
        For i, startPos in posList
        {
                endPos  := (i = posList.MaxIndex()) ? StrLen(data) : posList[i+1]
                subData := SubStr(data, startPos, endPos-startPos)

                ; 获取“基线项”和“风险等级”
                RegExMatch(subData, "i)/blank\.gif.*?<td>(.*?)</td><.*?>(.*?)</td>", m)
                baseInfo := m1 A_Tab m2

                ; 获取“检查点”...
                _pos := 1, _m := ""
                _regEx := "i)<tr class='unaccord'><td>(.*?)</td><td>(.*?)</td><td>.*?<td>(.*?)</td><td>(.*?)</td>"
                While, _pos := RegExMatch( subData, _regEx, _m, _pos+StrLen(_m) ) {
                        baseInfo_child := _m1 A_Tab _m2 A_Tab _m3 A_Tab _m4
                        indexCount ++
                        ResultTable .= indexCount A_Tab devInfo A_Tab baseInfo A_Tab baseInfo_child A_Tab "不合规" "`r`n"
                }
        }

        ResultTable := (ResultTable = "") ? (devInfo "`r`n") : ResultTable
}

ParamToObj() {
        global 0
        obj := {}

        Loop, %0%
        {
                param := %A_Index%

                If RegExMatch(param, "^(/|-)+(\w+)(\W(.+))?$", match) {
                        obj[match2] := match4
                        key         := match2
                }
                Else If (key != "")
                        obj[key] := param, key := ""
        }

        Return obj
}
1

评分人数

TOP

返回列表