【问题标题】:VBS script to batch process multiple files (replacing string of text)VBS脚本批量处理多个文件(替换文本字符串)
【发布时间】:2013-04-04 07:38:56
【问题描述】:

我在一个文件夹中有更多 10000 个文件(扩展名 *.WIR - 里面是纯文本)。我想在每一行中查找并替换特定行。我的问题是这行在每个文件中都略有不同+我不知道如何强制脚本进行批处理。

示例文件 1 有:“INSULATION RESIS 20.0 M ohm”

示例文件 2 有:“INSULATION RESIS 100.0 M ohm”

示例文件 3 有:“INSULATION RESIS 0.2 M ohm” ...

我需要将它们全部更改为“INSULATION RESIS 500.0 M ohm”。

VBS 脚本是否有机会使用通配符同时批处理所有内容。我该怎么做?

非常感谢您的任何回复。

【问题讨论】:

标签: text vbscript batch-file


【解决方案1】:

三个(子)问题的三种策略:

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
    

    此解决方案通过逐行处理每个文件来避免由于输入文件过大而导致的潜在内存耗尽。这种解决方案的缺点是输出处理需要额外的步骤(将输出写入临时文件,用临时文件替换输入文件)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-04-05
      • 2014-05-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多