使用VBScript修改多个文本文件

时间:2013-01-31 07:36:05

标签: vbscript

我需要这个VBScript的帮助 我在这里尝试做的是修改日志文件以删除里面的额外空格。 (我刚刚把这个脚本放在网上的某个地方。)
如果我只指定一个文件,但我正在尝试修改多个文件,它可以工作。使用我在下面做的通配符也不起作用(对不起,我对vbs不太好)

也有人知道如何在不创建新输出文件的情况下做到这一点吗?只需修改原始文件。提前谢谢..

Set objFSO = CreateObject("Scripting.FileSystemObject") 
'change this line to wherever you want to read the input from.
Set objTextFile = objFSO.OpenTextFile("D:\access*.log",1) 
Set objNewFile = objFSO.CreateTextFile("D:\access*_new.log")
Do Until objTextFile.AtEndOfStream

myString = objTextFile.Readline
objNewFile.WriteLine(Replace (myString, " ", " "))
Loop

2 个答案:

答案 0 :(得分:3)

除了我的评论:The Scripting Guy完全解释了你的替换案例:一个多个空格,带有正则表达式:

Set objRegEx = CreateObject("VBScript.RegExp")

objRegEx.Global = True
objRegEx.Pattern = " {2,}"

strSearchString = _
"Myer Ken, Vice President, Sales and Services"
strNewString = objRegEx.Replace(strSearchString," ")

Wscript.Echo strNewString

脚本专家还解释了如何change a text file

Const ForReading = 1
Const ForWriting = 2

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

在同一个technet.microsoft上,您可以找到如何轻松迭代所有文件。您可以再次使用正则表达式查看文件是否与您的(通配符)模式匹配,在您的情况^access.*\.log$中:

Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objFolder = objFSO.GetFolder("C:\FSO")
Set colFiles = objFolder.Files
For Each objFile in colFiles
    Wscript.Echo objFile.Name, objFile.Size
Next

这应该为您提供创建脚本的所有要素。

答案 1 :(得分:1)

冻干版:

  Const ForReading = 1
  Const ForWriting = 2

  Dim goFS    : Set goFS    = CreateObject("Scripting.FileSystemObject")

  Dim reZap : Set reZap = New RegExp
  reZap.Global  = True
  reZap.Pattern = " +"
  Dim oFile
  For Each oFile In goFS.GetFolder("..\testdata\14620676").Files
      WScript.Echo "----", oFile.Name
      Dim sAll : sAll = oFile.OpenAsTextStream(ForReading).ReadAll()
      WScript.Echo sAll
      oFile.OpenAsTextStream(ForWriting).Write reZap.Replace(sAll, " ")
      WScript.Echo oFile.OpenAsTextStream(ForReading).ReadAll()
  Next
如果没有@AutomatedChaos的令人钦佩的贡献(+1),那就没有任何意义,但是通过使用.Write而不是.WriteLine来避免增加文件的尾部。