标题: [问题求助] 如何利用VBS脚本实现文本替换? [打印本页]
作者: xiaoxiami 时间: 2012-1-17 14:25 标题: 如何利用VBS脚本实现文本替换?
问题描述:
用VBS实现一个简单的文本替换,现在有一个test.txt的文件,里面的内容如下:
WITH,12345678,with,……
想把WITH替换为Ab,并且with不受影响,也就是说,替换时需要区分大小写。望版上各位达人给个vbs的程序以实现我
的目的。
顺便提问,VBS在执行替换的功能时是调用哪个exe来实现的呢?是cmd.exe么;还是说先调用notepad.exe打开test.txt,然后实现替换。
假如是后者,那么可以让其调用notepad++.exe打开这个test.txt吗?
问题比较多,优先解决文本替换的程序问题(这个比较急),后面的问题可以慢慢讨论。
版上达人多多帮忙,小弟先行谢过了!
作者: Hello123World 时间: 2012-1-17 15:45
批处理调用cmd.exe,vbs一般调用WScript.exe.不应该说调用,应该说依赖吧。
作者: Demon 时间: 2012-1-17 15:52
Replace函数
作者: applba 时间: 2012-1-18 09:29
不论哪个编程语言,对字符串总是大小写敏感的。- 替换字符串中的子字符串
-
- Replace Function
- 返回一个字符串,该字符串中一个指定的子字符串(substring)已被另外一个子字符串取代指定数量的次数。
- Replace(expression, find, replacewith[, start[, count[, compare]]])
- expression 字符串表达式,这是原始字符串,这个字符串中的某些子字符串将被替换。
- find 原始字符串中的某个子字符串,find指定的子字符串将被替换掉。
- replacewith 用来替换find子字符串的新子字符串。
- start,原始字符串中子字符串搜索开始的位置,也是从这个位置开始返回的。如果省略,默认值为 1。
- count 执行子字符串替换的次数。如果省略,默认值为 -1,表示进行所有可能的替换。
- Compare 指示在处理子字符串时使用的比较类型。如果省略,默认值为 0 ,这意味着进行二进制比较。
-
- compare 参数可以有以下值:
- 常数 值 描述
- vbBinaryCompare 0 执行二进制比较。 默认值
- vbTextCompare 1 执行文本比较。
-
- Replace返回下面的值:
- 如果 ,返回
- expression 为零长度, 零长度字符串 ("")。
- expression 为Null,错误。
- find 是零长度, Copy of expression.
- replacewith 为零长度, Copy of expression with all occurrences of find removed.
- start > Len(expression) ,零长度字符串 ("")。
- count =0 , Copy of expression.
-
- Replace函数的返回值是一个字符串,并且从start指定的位置开始到expression的末尾结束进行过替换。
- 注意:It is not a copy of the original string from start to finish.
-
- 例子:
- Replace("XXpXXp", "p", "Y") '返回 "XXYXXY"。
- Replace("XXpXXp", "p", "o",3) '返回 "oXXo"。
- Replace("中国美国法国英国", "国", "guo3",3) ' 返回"美guo3法guo3英guo3"
- Replace("中国美国法国英国", "国", "guo3",5,1,vbTextCompare) '返回 "法guo3英国"
复制代码
作者: applba 时间: 2012-1-18 09:32
如果字符串是位于文本文件中,还需要用到FSO的textstream对象。
看楼主对概念如此模糊,需要多多充电。
作者: more 时间: 2012-2-9 22:58
本帖最后由 more 于 2012-2-9 23:04 编辑
- Option Explicit
-
- If WScript.Arguments.Count = 0 Then
- MsgBox "把要处理的文件拖到我身上就行了...", vbOKOnly, "友情提示..."
- WScript.Quit
- End If
-
- Dim strFile, objFso, objFile, objReg, ojbMtchs, objMtch, objFl, strRead, strSrc, strDst
-
- strSrc = "WITH"
- strDst = "Ab"
-
- strFile = WScript.Arguments(0)
-
- Set objFso = CreateObject("Scripting.FileSystemObject")
- With objFso
- Set objFile = .OpenTextFile(strFile, 1, False)
- Set objFl = .OpenTextFile(.GetSpecialFolder(2) & "\" & _
- .GetBaseName(strFile) & ".txt", 2, True)
- End With
-
- Set objReg = New RegExp
- With objReg
- .Global = True
- .IgnoreCase = False
- .Pattern = strSrc
- End With
-
- Do Until objFile.AtEndOfStream = True
- strRead = objFile.readline
- If objReg.Test(strRead) = True Then
- strRead = objReg.Replace(strRead, strDst)
- End If
- objFl.writeline strRead
- Loop
-
- objFile.close
- objFl.close
-
- With objFso
- .CopyFile .GetSpecialFolder(2) & "\" & .GetBaseName(strFile) & ".txt", strFile, True
- End With
-
- Set objReg = Nothing
- Set objFso = Nothing
- Set objFile = Nothing
- Set objFl = Nothing
-
- CreateObject("Wscript.Shell").Run "notepad " & strFile, 1
复制代码
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |