找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 25645|回复: 13

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

[复制链接]
发表于 2014-11-22 11:55:22 | 显示全部楼层 |阅读模式
是 Unicode 格式 (也可能是 ANSI 格式) 的 inf 文件(见附件),其中有两个 "[Strings]"
  1. 如何通过 vbs 将第二个(一定要第二个)删除或替换为其它任意字符串。
2. 假设含两个 [Strings] 的 inf 文件不只这一个,而且有的 inf 中只有一个 [Strings],如何先判断:如果含有两个,就处理,否则,不做处理?

要求:保存为 Unicode 格式,文件中其它内容不变。
发表于 2014-11-22 16:36:17 | 显示全部楼层
可以用 sed 吗?
 楼主| 发表于 2014-11-22 16:41:48 | 显示全部楼层
回复 2# CrLf


最好不用 sed。
 楼主| 发表于 2014-11-23 18:54:26 | 显示全部楼层
难道这个问题 VBS 不能解决吗?
apang 老师帮个忙啊!
 楼主| 发表于 2014-11-23 19:26:17 | 显示全部楼层
难道这个问题 VBS 不能解决吗?
apang 老师帮个忙啊!
发表于 2014-11-23 21:07:38 | 显示全部楼层
附件都传错了,搞什么搞

如果是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
复制代码

评分

参与人数 1技术 +1 收起 理由
yuanyannian + 1 技术大珈

查看全部评分

 楼主| 发表于 2014-11-24 06:23:39 | 显示全部楼层
回复 6# apang

谢谢了。
附件传错了吗?我点击下载可以呀。
 楼主| 发表于 2014-11-24 07:57:24 | 显示全部楼层
回复 6# apang

好用,谢谢 apang 老师!!

问题又来了,假设含两个 [Strings] 的 inf 文件不只这一个,而且有的 inf 中只有一个 [Strings],如何先判断:如果含有两个,就处理,否则,不做处理?
发表于 2014-11-24 16:28:00 | 显示全部楼层
回复 7# yuanyannian


    附件不是 unicode 编码格式
发表于 2014-11-24 16:29:42 | 显示全部楼层
回复 8# yuanyannian


    如果还有其它问题,请更新顶楼内容,或重新发帖
 楼主| 发表于 2014-11-24 17:16:24 | 显示全部楼层
回复 10# apang

已经更新了顶楼,请老师看一下,谢谢。
发表于 2014-11-24 19:55:25 | 显示全部楼层
  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
复制代码

评分

参与人数 1技术 +1 收起 理由
yuanyannian + 1 感谢 apang 老师的无私支援。

查看全部评分

 楼主| 发表于 2014-11-24 21:31:48 | 显示全部楼层
回复 12# apang

太复杂了,aoang 老师新辛苦,谢谢!
发表于 2014-11-25 01:03:57 | 显示全部楼层
回复 13# yuanyannian


apang 的技术分即将超越本人,看这恐怖的进度,我的第一大概只能保持一两周了
酷爱来酷爱来,给亲爱的 apang 老师加分助攻
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-17 06:27 , Processed in 0.019627 second(s), 8 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表