2013-04-04 190 views
1

我在一個文件夾(擴展名爲* .WIR--純文本里面)中有更多的10000個文件。我想在每一個內部找到並替換特定的行。我的問題是這行在每個文件中都略有不同+我不知道如何強制腳本進行批處理。批處理多個文件(替換文本字符串)的VBS腳本

實施例文件1具有: 「絕緣RESIS 20.0兆歐」

實施例文件2具有: 「絕緣RESIS 100.0兆歐姆」

實施例文件3具有: 「絕緣RESIS的0.2M歐姆」 。 ..

我需要將它們全部更改爲「INSULATION RESIS 500.0 M ohm」。

VBS腳本是否有可能使用通配符在同一時間批處理所有內容。我怎樣才能做到這一點?

非常感謝任何迴應。三(亞)問題

+0

[查找和替換](http://is.gd/LVmVUH) – Endoro 2013-04-04 08:15:55

回答

2

三招:

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 
2

我可能會做這樣的事情:通過處理每個文件

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 

該解決方案避免潛在的內存耗盡,由於大的輸入文件逐行。此解決方案的缺點是輸出處理需要額外的步驟(將輸出寫入臨時文件,用臨時文件替換輸入文件)。

相關問題