Board logo

标题: [问题求助] 求助---VBS 替换或删除 INF 文件中第二个相同字符串 [打印本页]

作者: yuanyannian    时间: 2014-11-22 11:55     标题: 求助---VBS 替换或删除 INF 文件中第二个相同字符串

是 Unicode 格式 (也可能是 ANSI 格式) 的 inf 文件(见附件),其中有两个 "[Strings]"
  1. 如何通过 vbs 将第二个(一定要第二个)删除或替换为其它任意字符串。
2. 假设含两个 [Strings] 的 inf 文件不只这一个,而且有的 inf 中只有一个 [Strings],如何先判断:如果含有两个,就处理,否则,不做处理?

要求:保存为 Unicode 格式,文件中其它内容不变。
作者: CrLf    时间: 2014-11-22 16:36

可以用 sed 吗?
作者: yuanyannian    时间: 2014-11-22 16:41

回复 2# CrLf


最好不用 sed。
作者: yuanyannian    时间: 2014-11-23 18:54

难道这个问题 VBS 不能解决吗?
apang 老师帮个忙啊!
作者: yuanyannian    时间: 2014-11-23 19:26

难道这个问题 VBS 不能解决吗?
apang 老师帮个忙啊!
作者: apang    时间: 2014-11-23 21:07

附件都传错了,搞什么搞

如果是ansi 编码,把 -1 改成 0
  1. Set fso = Createobject("Scripting.FileSystemObject")
  2. txt = fso.OpenTextFile("HIVECLS.INF", 1, false, -1).ReadAll
  3. Set re = New RegExp
  4. re.Pattern = "(\[Strings])([\s\S]+?)\1"
  5. re.IgnoreCase = true
  6. txt = re.Replace(txt, "$1$2")
  7. fso.OpenTextFile("New.inf", 2, true, -1).Write txt
复制代码

作者: yuanyannian    时间: 2014-11-24 06:23

回复 6# apang

谢谢了。
附件传错了吗?我点击下载可以呀。
作者: yuanyannian    时间: 2014-11-24 07:57

回复 6# apang

好用,谢谢 apang 老师!!

问题又来了,假设含两个 [Strings] 的 inf 文件不只这一个,而且有的 inf 中只有一个 [Strings],如何先判断:如果含有两个,就处理,否则,不做处理?
作者: apang    时间: 2014-11-24 16:28

回复 7# yuanyannian


    附件不是 unicode 编码格式
作者: apang    时间: 2014-11-24 16:29

回复 8# yuanyannian


    如果还有其它问题,请更新顶楼内容,或重新发帖
作者: yuanyannian    时间: 2014-11-24 17:16

回复 10# apang

已经更新了顶楼,请老师看一下,谢谢。
作者: apang    时间: 2014-11-24 19:55

  1. Set fso = Createobject("Scripting.FileSystemObject")
  2. For Each file in fso.GetFolder(".").Files
  3.         If LCase(Right(file, 4)) = ".inf" Then
  4.                 RegEx file, GetInfFormat(file)
  5.         End If
  6. Next
  7. MsgBox "OK"
  8. Function GetInfFormat(ByVal file)
  9.         With CreateObject("ADODB.Stream")
  10.                 .Mode = 3
  11.                 .Type = 1
  12.                 .Open
  13.                 .LoadFromFile file
  14.                 bin = .Read(2)
  15.         End With
  16.         s = Hex(AscB(MidB(bin, 1, 1))) & Hex(AscB(MidB(bin, 2)))
  17.         If UCase(s) = "FEFF" or UCase(s) = "FFFE" Then
  18.                 GetInfFormat = -1
  19.         Else GetInfFormat = 0
  20.         End If
  21. End Function
  22. Sub RegEx(ByVal file, intFormat)
  23.         Set f = fso.OpenTextFile(file, 1, false, intFormat)
  24.         txt = f.ReadAll : f.Close
  25.         Set re = New RegExp
  26.         re.Pattern = "(\[Strings])([\s\S]+?)\1"
  27.         re.IgnoreCase = true
  28.         If Not re.Test(txt) Then Exit Sub
  29.         Set f = fso.OpenTextFile("New_" & file.Name, 2, true, -1)
  30.         f.Write re.Replace(txt, "$1$2") : f.Close
  31. End Sub
复制代码

作者: yuanyannian    时间: 2014-11-24 21:31

回复 12# apang

太复杂了,aoang 老师新辛苦,谢谢!
作者: CrLf    时间: 2014-11-25 01:03

回复 13# yuanyannian


apang 的技术分即将超越本人,看这恐怖的进度,我的第一大概只能保持一两周了
酷爱来酷爱来,给亲爱的 apang 老师加分助攻




欢迎光临 批处理之家 (http://www.bathome.net/) Powered by Discuz! 7.2