用VBScript查找并替换我的文本中的字符串

用VBScript查找并替换我的文本中的字符串,vbscript,Vbscript,我正在搜索在文件(例如1.txt 2.xml)中执行搜索和替换的VBScript。 我有一个文件“1.txt”,里面有“临时”一词,我想把它改成“永久”。 因为我经常收到这个文件,所以我需要一个脚本 每次我试图编写一个包含opentxt文件和replace命令的脚本时,它都不会 我找到了一个脚本,可以用另一个文件更改此文件,并在其中进行更改,但这不是我要查找的内容。试试这个 If WScript.Arguments.Count <> 3 then WScript.Echo "us

我正在搜索在文件(例如1.txt 2.xml)中执行搜索和替换的VBScript。 我有一个文件“1.txt”,里面有“临时”一词,我想把它改成“永久”。 因为我经常收到这个文件,所以我需要一个脚本

每次我试图编写一个包含opentxt文件和replace命令的脚本时,它都不会

我找到了一个脚本,可以用另一个文件更改此文件,并在其中进行更改,但这不是我要查找的内容。

试试这个

If WScript.Arguments.Count <> 3 then
  WScript.Echo "usage: Find_And_replace.vbs filename word_to_find replace_with "
  WScript.Quit
end If

FindAndReplace WScript.Arguments.Item(0), WScript.Arguments.Item(1), WScript.Arguments.Item(2)
WScript.Echo "Operation Complete"

function FindAndReplace(strFilename, strFind, strReplace)
    Set inputFile = CreateObject("Scripting.FileSystemObject").OpenTextFile(strFilename, 1)
    strInputFile = inputFile.ReadAll
    inputFile.Close
    Set inputFile = Nothing
    Set outputFile = CreateObject("Scripting.FileSystemObject").OpenTextFile(strFilename,2,true)
    outputFile.Write Replace(strInputFile, strFind, strReplace)
    outputFile.Close
    Set outputFile = Nothing
end function 
*此方法区分大小写“This”!=“这个”

如果不想将整个文件读入内存,可以使用这样的临时文件

[C:\]> Find_And_Replace.vbs "C:\1.txt" "temporary" "permanent"
If WScript.Arguments.Count <> 3 then
  WScript.Echo "usage: Find_And_replace.vbs filename word_to_find replace_with "
  WScript.Quit
end If

FindAndReplace WScript.Arguments.Item(0), WScript.Arguments.Item(1), WScript.Arguments.Item(2)
WScript.Echo "Operation Complete"

function FindAndReplace(strFile, strFind, strReplace)
    Set objFSO = CreateObject("Scripting.FileSystemObject")
    Set objInputFile = objFSO.OpenTextFile(strFile,1)
    strTempDir = objFSO.GetSpecialFolder(2)
    Set objTempFile = objFSO.OpenTextFile(strTempDir & "\temp.txt",2,true)
    do until objInputFile.AtEndOfStream
        objTempFile.WriteLine(Replace(objInputFile.ReadLine, strFind, strReplace))
    loop
    objInputFile.Close
    Set objInputFile = Nothing
    objTempFile.Close
    Set objTempFile = Nothing
    objFSO.DeleteFile strFile, true
    objFSO.MoveFile strTempDir & "\temp.txt", strFile
    Set objFSO = Nothing
end function 
如果WScript.Arguments.Count为3,则
Echo“用法:查找和替换.vbs文件名word到查找替换”
WScript.Quit
如果结束
查找并替换WScript.Arguments.Item(0)、WScript.Arguments.Item(1)、WScript.Arguments.Item(2)
Echo“操作完成”
函数find和replace(strFile、strFind、strReplace)
设置objFSO=CreateObject(“Scripting.FileSystemObject”)
设置objInputFile=objFSO.OpenTextFile(strFile,1)
strTempDir=objFSO.GetSpecialFolder(2)
设置objTempFile=objFSO.OpenTextFile(strTempDir&“\temp.txt”,2,true)
直到objInputFile.AtEndOfStream
objTempFile.WriteLine(替换(objInputFile.ReadLine、strFind、strReplace))
环
objInputFile.Close
设置objInputFile=Nothing
objTempFile.Close
Set objTempFile=Nothing
objFSO.DeleteFile strFile,true
objFSO.MoveFile strTempDir&“\temp.txt”,strFile
设置objFSO=Nothing
端函数

您可以尝试此版本,它不会将整个文件拖到内存中:

Set objFS = CreateObject("Scripting.FileSystemObject")
strFile=WScript.Arguments.Item(0)
strOld=WScript.Arguments.Item(1)
strNew=WScript.Arguments.Item(2)
Set objFile = objFS.OpenTextFile(strFile)
Do Until objFile.AtEndOfStream
 strLine = objFile.ReadLine 
        if Instr(strLine,strOld)> 0 Then
          strLine=Replace(strLine,strOld,strNew)
        End If
 WScript.Echo strLine
Loop
用法:

c:\test> cscript //nologo find_replace.vbs file oldtext newtext

这不会更改文件。我之所以将整个文件“slurp”到内存中,是因为我可以将更改写回同一个文件。非常感谢,它非常漂亮和有创意,这就是我想要的。新年快乐。您好,我有时对脚本有问题,我遇到问题的文件包括“”,在我尝试替换的单词之前的文件中(即“此航班号为“临时”。以及结束的文件。配置我没有收到任何错误(操作完成)喜欢成功,所以很难知道问题出在哪里。知道为什么或者如何解决它吗?RegardsIt通常会感谢提供正确答案的用户,将他们的答案标记为接受答案。我已经使用扩展名为.config的文件测试了脚本,该文件包含您在评论中提供的示例文本,以及我没有遇到任何问题。我不确定您是如何使用该脚本的,但在“在命令行中键入命令时,不要包含”简单地键入Find_和_Replace.vbs“C:\1.txt”“temporary”“permanent”。而不是Find_和_Replace.vbs“C:\1.txt”“temporary”“permanent”。您还可以尝试将FindAndReplace函数“Set-inputFile=CreateObject(“Scripting.FileSystemObject”).OpenTextFile(strFilename,1)”中的第一行更改为“Set-inputFile=CreateObject(“Scripting.FileSystemObject”).OpenTextFile(strFilename,1,true,0)”。如果不起作用,请尝试将这一行更改为“outputFile.Write Replace”(strInputFile,strFind,strReplace)”使用此“outputFile.Write Replace(strInputFile,strFind,strReplace,1,-1,1)”记住,Replace函数返回被替换的文本,它不会修改传递给它的变量。