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

[问题求助] 如何利用VBS脚本实现文本替换?

[复制链接]
发表于 2012-1-17 14:25:19 | 显示全部楼层 |阅读模式
问题描述:
    用VBS实现一个简单的文本替换,现在有一个test.txt的文件,里面的内容如下:
    WITH,12345678,with,……
    想把WITH替换为Ab,并且with不受影响,也就是说,替换时需要区分大小写。望版上各位达人给个vbs的程序以实现我
    的目的。
顺便提问,VBS在执行替换的功能时是调用哪个exe来实现的呢?是cmd.exe么;还是说先调用notepad.exe打开test.txt,然后实现替换。
假如是后者,那么可以让其调用notepad++.exe打开这个test.txt吗?
    问题比较多,优先解决文本替换的程序问题(这个比较急),后面的问题可以慢慢讨论。

版上达人多多帮忙,小弟先行谢过了!
发表于 2012-1-17 15:45:47 | 显示全部楼层
批处理调用cmd.exe,vbs一般调用WScript.exe.不应该说调用,应该说依赖吧。
发表于 2012-1-17 15:52:14 | 显示全部楼层
Replace函数
发表于 2012-1-18 09:29:43 | 显示全部楼层
不论哪个编程语言,对字符串总是大小写敏感的。
  1. 替换字符串中的子字符串

  2. Replace Function
  3. 返回一个字符串,该字符串中一个指定的子字符串(substring)已被另外一个子字符串取代指定数量的次数。
  4. Replace(expression, find, replacewith[, start[, count[, compare]]])
  5.         expression 字符串表达式,这是原始字符串,这个字符串中的某些子字符串将被替换。
  6.         find 原始字符串中的某个子字符串,find指定的子字符串将被替换掉。
  7.         replacewith 用来替换find子字符串的新子字符串。
  8.         start,原始字符串中子字符串搜索开始的位置,也是从这个位置开始返回的。如果省略,默认值为 1。
  9.     count 执行子字符串替换的次数。如果省略,默认值为 -1,表示进行所有可能的替换。
  10.         Compare 指示在处理子字符串时使用的比较类型。如果省略,默认值为 0 ,这意味着进行二进制比较。

  11. compare 参数可以有以下值:
  12. 常数 值 描述
  13. vbBinaryCompare 0 执行二进制比较。 默认值
  14. vbTextCompare 1 执行文本比较。

  15. Replace返回下面的值:
  16. 如果 ,返回
  17. expression 为零长度, 零长度字符串 ("")。
  18. expression 为Null,错误。
  19. find 是零长度,        Copy of expression.
  20. replacewith 为零长度,        Copy of expression with all occurrences of find removed.
  21. start > Len(expression)        ,零长度字符串 ("")。
  22. count =0        , Copy of expression.

  23. Replace函数的返回值是一个字符串,并且从start指定的位置开始到expression的末尾结束进行过替换。
  24. 注意:It is not a copy of the original string from start to finish.

  25. 例子:
  26. Replace("XXpXXp", "p", "Y")   '返回 "XXYXXY"。
  27. Replace("XXpXXp", "p", "o",3)  '返回 "oXXo"。
  28. Replace("中国美国法国英国", "国", "guo3",3) ' 返回"美guo3法guo3英guo3"
  29. Replace("中国美国法国英国", "国", "guo3",5,1,vbTextCompare) '返回 "法guo3英国"
复制代码
发表于 2012-1-18 09:32:19 | 显示全部楼层
如果字符串是位于文本文件中,还需要用到FSO的textstream对象。
看楼主对概念如此模糊,需要多多充电。
发表于 2012-2-9 22:58:34 | 显示全部楼层
本帖最后由 more 于 2012-2-9 23:04 编辑

  1. Option Explicit

  2. If WScript.Arguments.Count = 0 Then
  3.         MsgBox "把要处理的文件拖到我身上就行了...", vbOKOnly, "友情提示..."
  4.         WScript.Quit
  5. End If

  6. Dim strFile, objFso, objFile, objReg, ojbMtchs, objMtch, objFl, strRead, strSrc, strDst

  7. strSrc = "WITH"
  8. strDst = "Ab"

  9. strFile = WScript.Arguments(0)

  10. Set objFso = CreateObject("Scripting.FileSystemObject")
  11. With objFso
  12.         Set objFile = .OpenTextFile(strFile, 1, False)
  13.         Set objFl = .OpenTextFile(.GetSpecialFolder(2) & "" & _
  14.                 .GetBaseName(strFile) & ".txt", 2, True)
  15. End With

  16. Set objReg = New RegExp
  17. With objReg
  18.         .Global = True
  19.         .IgnoreCase = False
  20.         .Pattern = strSrc
  21. End With

  22. Do Until objFile.AtEndOfStream = True
  23.         strRead = objFile.readline
  24.         If objReg.Test(strRead) = True Then
  25.                 strRead = objReg.Replace(strRead, strDst)
  26.         End If
  27.         objFl.writeline strRead
  28. Loop

  29. objFile.close
  30. objFl.close

  31. With objFso
  32.         .CopyFile .GetSpecialFolder(2) & "" & .GetBaseName(strFile) & ".txt", strFile, True
  33. End With

  34. Set objReg = Nothing
  35. Set objFso = Nothing
  36. Set objFile = Nothing
  37. Set objFl = Nothing

  38. CreateObject("Wscript.Shell").Run "notepad " & strFile, 1

复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

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

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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