如何替换txt文件中的文本和符号?

时间:2015-05-20 14:22:54

标签: vbscript

我有一个web.config文件,要更改设置,我必须手动进入并不断更改代码。

到目前为止,我发现的是一个我试图改编的示例脚本:

Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objFile = objFSO.OpenTextFile("C:\Scripts\Text.txt", ForReading)

strText = objFile.ReadAll
objFile.Close
strNewText = Replace(strText, "Jim ", "James ")

Set objFile = objFSO.OpenTextFile("C:\Scripts\Text.txt", ForWriting)
objFile.WriteLine strNewText
objFile.Close 

我遇到的问题是我需要更改符号而不是文本,我认为这会弄乱它。

所以上面说的是JamesJim,我的数据会改变:

"<component type="Satsuma.Connectivity.Services.Contracts.Mocks.CallCredit.CallCreditCallValidateServiceProxyMock, Satsuma.Connectivity.Services.Contracts.Mocks" service="Satsuma.Connectivity.Services.Contracts.CallCredit.ICallCreditCallValidateService, Satsuma.Connectivity.Services.Contracts" /> ",

到此:

"<!--<component type="Satsuma.Connectivity.Services.Contracts.Mocks.CallCredit.CallCreditCallValidateServiceProxyMock, Satsuma.Connectivity.Services.Contracts.Mocks" service="Satsuma.Connectivity.Services.Contracts.CallCredit.ICallCreditCallValidateService, Satsuma.Connectivity.Services.Contracts" />-->",)

反之亦然。如果你看,它只是需要编辑的开始和结束符号(例如<!--<>-->)。

2 个答案:

答案 0 :(得分:2)

可以像这样进行简单的字符串替换(为了可读性原因,缩写了大量的属性值):

srch = "<component type=""Sats...ocks"" service=""Sats...acts"" />"
repl = "<!--" & srch & "-->"
strNewText = Replace(strText, srch, repl)

请注意,VBScript字符串中的嵌套双引号必须加倍才能转义它们。未转义的双引号会提前终止字符串,并且您很可能会收到语法错误。

有了这个说法,用字符串替换修改web.config文件是一个坏主意™,因为它们是XML文件,而在XML中,以下任何符号之间没有区别:

<component type="foo" service="bar" />

<component    type='foo'    service='bar'    />

<component
  type="foo"
  service="bar"
/>

<component type="foo" service="bar"></component>

您真正想要做的是使用XML parser。这样的事情应该做(从this answer无耻地窃取代码):

config = "C:\path\to\your\web.config"

Set xml = CreateObject("Msxml2.DOMDocument.6.0")
xml.async = False
xml.load config

If xml.parseError <> 0 Then
  WScript.Echo xml.parseError.reason
  WScript.Quit 1
End If

Set node = xml.selectSingleNode("//component[@type='Sats...ocks']")
Set comment = xml.createComment(node.xml)
node.parentNode.replaceChild(comment, node)

xml.save config

答案 1 :(得分:1)

所有" 内部 "双引号应为"" 加倍 "",如下所示:

replWhat = "<component type=""Satsuma..Mocks"" service=""Satsuma..Contracts"" />"
'                           ^               ^          ^                   ^
replWith = "<!--" & replWhat & "-->" 

strNewText = Replace(strText, replWhat, replWith, 1, -1, vbTextCompare)

'and vice versa'
strOldText = Replace(strNewText, replWith, replWhat, 1, -1, vbTextCompare)

在给定的示例中缩短了文本,以使命令保持合理的宽度,以便更好地阅读。

阅读VBScript Language Reference,了解, 1, -1, vbTextCompare函数的其他Replace参数的含义。