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

我这里ws.regwrite写入是问号,wmi写入正常,试试看
  1. Dim fso, txt, re, m, regPath, regValue, regData
  2. Set fso = CreateObject("Scripting.FileSystemObject")
  3. txt = fso.OpenTextFile("HIVESFT.INF", 1, false, -1).ReadAll
  4. txt = txt & vbCrLf & "["
  5. Set re = New RegExp
  6. re.Pattern = "^ *\[Strings] *$[\s\S]*?(?=^ *\[)"
  7. re.IgnoreCase = true
  8. re.Global = true
  9. re.MultiLine = true
  10. If Not re.Test(txt) Then WScript.Quit
  11. txt = re.Execute(txt)(0)
  12. re.Pattern = "^ *(BIOS|NDIS) *= *(.+)"
  13. For Each m in re.Execute(txt)
  14.         regPath = "yyn\Desktop"
  15.         regData = Replace(m.SubMatches(1), chr(34), "")
  16.         If UCase(m.SubMatches(0)) = "BIOS" Then
  17.                 regValue = "yyn1"
  18.         Else
  19.                 regValue = "yyn2"
  20.         End If
  21.         WriteToRegValue regPath, regValue, regData
  22. Next
  23. Sub WriteToRegValue(ByVal regPath, ByVal regValue, ByVal regData)
  24.         Const HKCU = &H80000001
  25.         Dim regWMI
  26.         Set regWMI = GetObject("winmgmts:{impersonationLevel=impersonate}!\\.\root\Default:StdRegProv")
  27.         regWMI.CreateKey HKCU, regPath
  28.         regWMI.SetStringValue HKCU, regPath, regValue, regData
  29. End Sub
复制代码

TOP

回复 17# yuanyannian


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

TOP

回复 19# yuanyannian


    还是保存到reg文件吧,少一点弯弯绕
  1. Dim s1, s2, strSection, arField, arValue, arPath
  2. s1 = "HKEY_CURRENT_USER\"
  3. s2 = "HKEY_LOCAL_MACHINE\"
  4. strSection = "Strings"
  5. arField = Array("BIOS", "NDIS", "GULIM")
  6. arValue = Array("yyn1", "yyn2", "yyn3")
  7. arPath = Array(s1 & "yyn\Desktop", s1 & "yyn\Test", s2 & "Software\Test\yyn")
  8. Dim fso, txt, re, i, regData
  9. Set fso = CreateObject("Scripting.FileSystemObject")
  10. txt = fso.OpenTextFile("HIVESFT.INF", 1, false, -1).ReadAll
  11. txt = txt & vbCrLf & "["
  12. Set re = New RegExp
  13. re.Pattern = "^ *\[" & strSection & "] *$[\s\S]*?(?=^ *\[)"
  14. re.IgnoreCase = true
  15. re.Global = true
  16. re.MultiLine = true
  17. If Not re.Test(txt) Then WScript.Quit
  18. txt = re.Execute(txt)(0)
  19. For i = 0 to UBound(arField)
  20.         re.Pattern = "^ *" & arField(i) & " *= *("".*"")"
  21.         If re.Test(txt) Then
  22.                 regData = re.Execute(txt)(0).SubMatches(0)
  23.                 s = s & "[" & arPath(i) & "]" & vbCrLf
  24.                 s = s & """" & arValue(i) & """=" & regData & vbCrLf
  25.                 s = s & vbCrLf
  26.         End If
  27. Next
  28. s = "Windows Registry Editor Version 5.00" & vbCrLf & vbCrLf & s
  29. fso.OpenTextFile("Result.reg", 2, true, -1).Write s
复制代码

TOP

回复 22# yuanyannian


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

TOP

回复 25# yuanyannian


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

TOP

回复 27# yuanyannian


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

TOP

返回列表