返回列表 发帖
本帖最后由 apang 于 2014-10-30 09:40 编辑

我这里ws.regwrite写入是问号,wmi写入正常,试试看
Dim fso, txt, re, m, regPath, regValue, regData
Set fso = CreateObject("Scripting.FileSystemObject")
txt = fso.OpenTextFile("HIVESFT.INF", 1, false, -1).ReadAll
txt = txt & vbCrLf & "["
Set re = New RegExp
re.Pattern = "^ *\[Strings] *$[\s\S]*?(?=^ *\[)"
re.IgnoreCase = true
re.Global = true
re.MultiLine = true
If Not re.Test(txt) Then WScript.Quit
txt = re.Execute(txt)(0)
re.Pattern = "^ *(BIOS|NDIS) *= *(.+)"
For Each m in re.Execute(txt)
        regPath = "yyn\Desktop"
        regData = Replace(m.SubMatches(1), chr(34), "")
        If UCase(m.SubMatches(0)) = "BIOS" Then
                regValue = "yyn1"
        Else
                regValue = "yyn2"
        End If
        WriteToRegValue regPath, regValue, regData
Next
Sub WriteToRegValue(ByVal regPath, ByVal regValue, ByVal regData)
        Const HKCU = &H80000001
        Dim regWMI
        Set regWMI = GetObject("winmgmts:{impersonationLevel=impersonate}!\\.\root\Default:StdRegProv")
        regWMI.CreateKey HKCU, regPath
        regWMI.SetStringValue HKCU, regPath, regValue, regData
End SubCOPY

TOP

回复 17# yuanyannian


    已修改,如果想自定义,更改相应变量的值即可

TOP

回复 19# yuanyannian


    还是保存到reg文件吧,少一点弯弯绕
Dim s1, s2, strSection, arField, arValue, arPath
s1 = "HKEY_CURRENT_USER\"
s2 = "HKEY_LOCAL_MACHINE\"
strSection = "Strings"
arField = Array("BIOS", "NDIS", "GULIM")
arValue = Array("yyn1", "yyn2", "yyn3")
arPath = Array(s1 & "yyn\Desktop", s1 & "yyn\Test", s2 & "Software\Test\yyn")
Dim fso, txt, re, i, regData
Set fso = CreateObject("Scripting.FileSystemObject")
txt = fso.OpenTextFile("HIVESFT.INF", 1, false, -1).ReadAll
txt = txt & vbCrLf & "["
Set re = New RegExp
re.Pattern = "^ *\[" & strSection & "] *$[\s\S]*?(?=^ *\[)"
re.IgnoreCase = true
re.Global = true
re.MultiLine = true
If Not re.Test(txt) Then WScript.Quit
txt = re.Execute(txt)(0)
For i = 0 to UBound(arField)
        re.Pattern = "^ *" & arField(i) & " *= *("".*"")"
        If re.Test(txt) Then
                regData = re.Execute(txt)(0).SubMatches(0)
                s = s & "[" & arPath(i) & "]" & vbCrLf
                s = s & """" & arValue(i) & """=" & regData & vbCrLf
                s = s & vbCrLf
        End If
Next
s = "Windows Registry Editor Version 5.00" & vbCrLf & vbCrLf & s
fso.OpenTextFile("Result.reg", 2, true, -1).Write sCOPY

TOP

回复 22# yuanyannian


    代码是先找到 Strings 节,再在Strings节中找相应的字段。
比如 BIOS 字段,在Strings中有,在其它节也可能有。
如果去掉Strings节名,找到的可能就不正确,你希望这样吗?

TOP

回复 25# yuanyannian


    不带双引号还是 REG_SZ 类型吗?你不说清楚那我只考虑一种类型,不考虑其它类型或其它特殊情况

TOP

回复 27# yuanyannian


    第25行下面插入一行:
regData = chr(34) & Replace(regData, chr(34), "") & chr(34)COPY
第23行改成:
re.Pattern = "^ *" & arField(i) & " *= *([^\r\n]+)"COPY

TOP

返回列表