批处理多个文件(替换文本字符串)的VBS脚本
问题描述:
我在一个文件夹(扩展名为* .WIR--纯文本里面)中有更多的10000个文件。我想在每一个内部找到并替换特定的行。我的问题是这行在每个文件中都略有不同+我不知道如何强制脚本进行批处理。批处理多个文件(替换文本字符串)的VBS脚本
实施例文件1具有: “绝缘RESIS 20.0兆欧”
实施例文件2具有: “绝缘RESIS 100.0兆欧姆”
实施例文件3具有: “绝缘RESIS的0.2M欧姆” 。 ..
我需要将它们全部更改为“INSULATION RESIS 500.0 M ohm”。
VBS脚本是否有可能使用通配符在同一时间批处理所有内容。我怎样才能做到这一点?
非常感谢任何回应。三(亚)问题
答
三招:
cscript 01.vbs
xxA 1.0 BxxA 1.1 BxxA 123.456 Bxx
xxA 500.0 BxxA 500.0 BxxA 500.0 Bxx
Option Explicit
Dim oFS : Set oFS = CreateObject("Scripting.FileSystemObject")
' use RegExp to replace all occurrences of "A #.# B" in a string
Dim reRpl : Set reRpl = New RegExp
Dim sTest : sTest = "xxA 1.0 BxxA 1.1 BxxA 123.456 Bxx"
reRpl.Global = True
reRpl.Pattern = "(A)\d+\.\d+(B)"
WScript.Echo sTest
WScript.Echo reRpl.Replace(sTest, "$1500.0$2")
' use FileSystemObject/Stream to read/write from/to file
Dim sAll : sAll = oFS.OpenTextFile(WScript.ScriptFullName).ReadAll()
WScript.Echo sAll
oFS.CreateTextFile(WScript.ScriptFullName, True).Write sAll
' use FileSystemObject/Folder/File to loop directory
Dim oFile
For Each oFile In oFS.GetFolder(".").Files
WScript.Echo oFile.Name
Next
username24.txt
01.vbs
00.vbs
答
我可能会做这样的事情:通过处理每个文件
Set fso = CreateObject("Scripting.FileSystemObject")
Set re = New RegExp
re.Pattern = "(INSULATION RESIS) \d+\.\d+ (M ohm)"
For Each f In fso.GetFolder("...").Files
If LCase(fso.GetExtensionName(f)) = "wir" Then
filename = f.Path
tempname = filename & ".tmp"
Set f_in = fso.OpenTextFile(filename)
Set f_out = fso.OpenTextFile(tempname, 2)
Do Until f_in.AtEndOfStream
f_out.WriteLine re.Replace(f_in.ReadLine, "$1 500.0 $2")
Loop
f_in.Close
f_out.Close
f.Delete
fso.MoveFile tempname, filename
End If
Next
该解决方案避免潜在的内存耗尽,由于大的输入文件逐行。此解决方案的缺点是输出处理需要额外的步骤(将输出写入临时文件,用临时文件替换输入文件)。
[查找和替换](http://is.gd/LVmVUH) – Endoro 2013-04-04 08:15:55