使用VBScript修改多个文本文件

使用VBScript修改多个文本文件,vbscript,Vbscript,我需要有关此VBScript的帮助 我在这里要做的是修改日志文件以删除其中的多余空间。(我刚刚在网上的某个地方得到了这个脚本。) 如果我只指定了一个文件,但试图修改多个文件,它就会工作。我在下面使用通配符也不起作用(对不起,我不太擅长vbs) 还有人知道我们如何在不创建新输出文件的情况下实现这一点吗?只需修改原始文件。提前谢谢 Set objFSO = CreateObject("Scripting.FileSystemObject") 'change this line to whereve

我需要有关此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

除了我的评论:准确地解释了您的替换情况:多个空格乘以一,使用正则表达式:

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
脚本编写人员还解释了如何:

同时,您可以找到如何轻松地迭代所有文件。您可以再次使用正则表达式来查看文件是否与您的(通配符)模式匹配,在您的情况下是
^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

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

除了我的注释之外:准确地解释了您的替换情况:多个空格加一个正则表达式:

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
脚本编写人员还解释了如何:

同时,您可以找到如何轻松地迭代所有文件。您可以再次使用正则表达式来查看文件是否与您的(通配符)模式匹配,在您的情况下是
^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

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

冻干版:

  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来避免文件尾部的增长。

冻干版本:

  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来避免文件尾部的增长。

1。将空格
替换为空格
,这将产生与输入相同的输出。你可以用单空格代替双空格,但是如果有三重空格,你仍然会得到双空格。。。理想情况下,可以使用正则表达式替换。2.如果你想修改一个文件而不创建另一个文件,你必须缓冲你的输入,并用缓冲区覆盖这个文件(这很危险,你可能会丢失数据),也许你可以用ADO来做。3.您不能使用通配符,您应该指定一个文件夹,遍历所有文件并选择与特定名称匹配的文件。非常感谢@AutomatedChaosThanks非常感谢@AutomatedChaos回答我的问题。我知道它们都是空间。但是对于我试图解析的日志文件,有一些额外的空间需要清理。我遇到了与下面这篇文章类似的问题。正如我所提到的,该脚本在我使用的日志文件上工作得非常完美。这里是我得到脚本的链接:你能给我看一下迭代所有文件的代码吗?结果输出文件名将与原始文件名相同,但带有后缀?1。将空格
替换为空格
,这将产生与输入相同的输出。你可以用单空格代替双空格,但是如果有三重空格,你仍然会得到双空格。。。理想情况下,可以使用正则表达式替换。2.如果你想修改一个文件而不创建另一个文件,你必须缓冲你的输入,并用缓冲区覆盖这个文件(这很危险,你可能会丢失数据),也许你可以用ADO来做。3.您不能使用通配符,您应该指定一个文件夹,遍历所有文件并选择与特定名称匹配的文件。非常感谢@AutomatedChaosThanks非常感谢@AutomatedChaos回答我的问题。我知道它们都是空间。但是对于我试图解析的日志文件,有一些额外的空间需要清理。我遇到了与下面这篇文章类似的问题。正如我所提到的,该脚本在我使用的日志文件上工作得非常完美。这里是我得到脚本的链接:你能给我看一下迭代所有文件的代码吗?结果输出文件名将与原始文件名相同,但带有后缀?