0

我需要这个 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
4

2 回答 2

3

除了我的评论:脚本专家准确地解释了您的替换案例:多个空格一个,带有正则表达式:

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

脚本专家还解释了如何更改文本文件

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

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

于 2013-01-31T09:27:02.660 回答
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 来避免增大文件的尾部。

于 2013-01-31T09:47:45.410 回答