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

[问题求助] [已解决]VBS如何读取unicode编码的inf文件里等号后面的内容

本帖最后由 pcl_test 于 2016-8-14 11:48 编辑

求助---VBS如何读取 inf 文件等号后面的内容 并赋给变量

问题描述:还是处理 unicode 格式的 inf 文件,比如:

  aaa.inf
   [Strings]
   BIOS = "abcd-abcd"
   TIDS  = ABCD

用 vbs (也要求是 unicode 格式)读取 BIOS 及 TIDS 等号后面的内容,并分别赋给变量 str1 和 str2

谢谢!
76626yyn

回复 1# yuanyannian

是不是这个问题太幼稚?
76626yyn

TOP

回复 3# yu2n

谢谢,试了一下,但读不出啊。
76626yyn

TOP

回复 3# yu2n

上传需要处理的原文件,请老师给看一下。
文件大点,给个地址:

HIVESFT.rar

http://pan.baidu.com/s/1mgl24dy
76626yyn

TOP

本帖最后由 yuanyannian 于 2014-10-29 06:30 编辑

回复 7# yu2n

再次感谢了。
这样可以了,但问题又来了:就思密达而言,将读出的变量写入注册表,都成了“?????????”,请老师给看一下。
另外,不能读如:STANGDARD_NAME、KLT_63 等格式的变量。
76626yyn

TOP

本帖最后由 yuanyannian 于 2014-10-29 12:29 编辑

回复 9# yu2n

直接在 vbs 中:
    Set Reg=WScript.CreateObject("WScript.Shell")
    Reg.RegWrite "HKCU\yyn\Desktop\Wallpaper",strBIOS,"REG_SZ"
   
如果用 .reg ,需要用vbs先写入到 .reg 文件,而且必须是 unicode 格式,这个我不会,老师可否帮一帮?
76626yyn

TOP

回复 11# yu2n

抱歉,看不太懂,请帮写一个代码?
76626yyn

TOP

回复 13# yu2n

抱歉,我是真的不会,前一阵子还在论坛中求助过,是可以创建一个文件,但只能全新覆盖写入,不能追加写入。
请老师帮忙,谢谢!
76626yyn

TOP

本帖最后由 yuanyannian 于 2014-10-30 06:51 编辑

回复 16# apang

谢谢 apang 老师出手,读、写均正常。
不过,我的需求是:只读出 =  后面的内容作为变量,写入注册表中的路径、键值是需要自定义的,比如 HKCU\yyn\Desktop, yyn(键值), BIOS 或 NDIS (还有很多其它的) = 后面的内容(数据), 或者如注册表文件:

[HKEY_CURRENT_USER\yyn\Desktop]
"yyn1"="대한민국 표준시"
"yyn2"="한국어"

或:
[HKEY_CURRENT_USER\yyn\System\Test]
"yyn3"="한국어 입력 시스템 (IME 2000)"
"yyn4"="한"

或者将读出的数据分别写成注册表文件,再自行导入注册表也可。比如写成注册表文件 (unicode 格式):

Windows Registry Editor Version 5.00

[HKEY_CURRENT_USER\yyn\Desktop]
"yyn1"="대한민국 표준시"
"yyn2"="한국어"

[HKEY_CURRENT_USER\yyn\System\Test]
"yyn3"="한국어 입력 시스템 (IME 2000)"
"yyn4"="한"

有劳 apang 老师了。
76626yyn

TOP

回复 18# apang

是这样吗?
  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|NETWORK_DDE|NETWORK_DDE_DESCRIPTION|NETWORK_DDE_DSDM) *= *(.+)"
  13. For Each m in re.Execute(txt)
  14.     regData = Replace(m.SubMatches(1), chr(34), "")
  15.     If UCase(m.SubMatches(0)) = "BIOS" Then
  16.         regPath = "yyn\Desktop"
  17.         regValue = "yyn1"
  18.     End If
  19.     If UCase(m.SubMatches(0)) = "NDIS" Then
  20.         regPath = "yyn\Desktop\yyn"
  21.         regValue = "yyn2"
  22.     End If
  23.     If UCase(m.SubMatches(0)) = "NETWORK_DDE" Then
  24.         regPath = "yyn\Test"
  25.         regValue = "yyn3"
  26.     End If
  27.     If UCase(m.SubMatches(0)) = "NETWORK_DDE_DESCRIPTION" Then
  28.         regPath = "yyn\Test\yyn"
  29.         regValue = "yyn4"
  30.     End If
  31.     If UCase(m.SubMatches(0)) = "NETWORK_DDE_DSDM" Then
  32.         regPath = "yyn\yyn\yyn"
  33.         regValue = "yyn5"
  34.     End If
  35.     WriteToRegValue regPath, regValue, regData
  36. Next
  37. Sub WriteToRegValue(ByVal regPath, ByVal regValue, ByVal regData)
  38.     Const HKCU = &H80000001
  39.     Dim regWMI
  40.     Set regWMI = GetObject("winmgmts:{impersonationLevel=impersonate}!\\.\root\Default:StdRegProv")
  41.     regWMI.CreateKey HKCU, regPath1
  42.     regWMI.SetStringValue HKCU, regPath, regValue, regData
  43. End Sub
复制代码
但提示:

另外,在 re.Pattern = "^ *(BIOS|NDIS|NETWORK_DDE|NETWORK_DDE_DESCRIPTION|NETWORK_DDE_DSDM) *= *(.+)" 中,如果需要几十个变量,该如何处理?
76626yyn

TOP

提示现象是我把 regWMI.CreateKey HKCU, regPath1 搞错了。

另外,我把 HKCU 改成 HKLM ,把  Const HKCU = &H80000001 改为     Const HKLM = &H80000002,失败。
76626yyn

TOP

这样也好,19楼的代码不能写入 HKLM 应该是对该根键没有权限造成的,路径写入 HKLM 的子键中是则可以。
再次谢谢 apang 老师。

再请问,如果不需要搜索 [strings], 去掉那些代码?
76626yyn

TOP

回复 23# apang

有道理,那我采用写入注册表文件。
76626yyn

TOP

回复 23# apang

再麻烦 apang 老师,测试中发现一个问题:当源文件等号后面的数据没有 "" 情况下,无法读出及写入注册表文件。
76626yyn

TOP

回复 26# apang

是的,都是字符串 - REG_SZ 的。
76626yyn

TOP

返回列表