我需要这个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
答案 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来避免增加文件的尾部。