2009-12-29 87 views
5

我正在搜索在文件中执行搜索和替换的VBScript(例如1.txt 2.xml)。 我有文件“1.txt”里面有“临时”一词,我想将它改为“永久”。 因为我得到这个文件很多,我需要一个脚本。在VBScript中查找并替换我的文本中的字符串

每当我尝试编写包含打开txt文件和命令替换的脚本时,它都不会。

我发现了一个脚本,改变这个文件与另一个文件,并做了里面的变化,但这不是我正在寻找。

+0

这是习惯感谢谁提供正确答案的用户通过将他们的答案标记为接受的答案。 – Tester101 2010-01-04 19:54:27

+0

我已经使用包含您在注释中提供的示例文本的.config扩展名的文件测试了脚本,并且我没有任何问题。我不确定你是如何使用脚本的,但在“”的情况下,当你在命令行键入命令时,不要包含“”简单类型Find_And_Replace.vbs“C:\ 1.txt”“temporary” “常驻”。 NOT Find_And_Replace.vbs“C:\ 1.txt”“”temporary“”“permanent”。 – Tester101 2010-01-11 13:02:00

+0

您也可以尝试更改FindAndReplace函数的第一行“Set inputFile = CreateObject(”Scripting.FileSystemObject“)。”OpenTextFile(strFilename,1)“用这个”Set inputFile = CreateObject(“Scripting.FileSystemObject”).OpenTextFile strFilename,1,true,0)“。如果这不起作用,请尝试将此行更改为“outputFile.Write替换(strInputFile,strFind,strReplace)”使用此“outputFile.Write替换(strInputFile,strFind,strReplace,1,-1,1)” – Tester101 2010-01-11 13:20:39

回答

5

试试这个

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 

把它保存在一个名为Find_And_Replace.vbs,它就可以在这样的命令行中使用。

[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 
+0

非常感谢,它非常漂亮和富有创意,这就是我一直在寻找的东西。 新年快乐。 – Tzahi 2010-01-03 07:55:32

+0

嗨, 我有时有问题的脚本,我有一个问题的文件包括“”,在我尝试替换的单词前的文件(即“这个航班号是”临时“”。文件结尾.config 我没有得到任何错误(操作完成),如成功,所以它是很难知道有什么问题。 任何想法为什么或如何解决它? 问候 – Tzahi 2010-01-10 13:23:45

+0

将不适用于Unicode I猜想 – stijn 2013-06-15 08:35:47

1

你可以试试这个版本,这不整个文件啜入内存:

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 
+0

这并不会改变文件,因为我把整个文件“sl”“到内存中,所以我可以将修改写回到同一个文件中。 – Tester101 2009-12-30 14:28:13