如何根据扩展名查找文件并动态替换文本?

How to find files based on extension and dynamically replace text?

我试图在文件扩展名为 .CAL 的文件夹中找到该文件,然后编辑以特定文本开头的行。

到目前为止,这是我的代码:

Option Explicit

Dim objFso, objOtF, cd,  content

Set objFso = CreateObject("Scripting.FileSystemObject")
cd = Replace("C:\Users\username\Desktop\Replace.vbs", "Replace.vbs", "09781DK2886.cal")

Set objOtF = objFso.OpenTextFile(cd, 1)
content = objOtF.ReadAll
objOtF.Close

Set objOtF = objFso.OpenTextFile(cd, 2)
objOtF.Write Replace(content, "PARALLEL_VOLTAGE_TEST 125", "PARALLEL_VOLTAGE_TEST 180")
objOtF.Close

我在这里面临的问题是文件名“09781DK2886.cal”因系统而异。此外,内容 "PARALLEL_VOLTAGE_TEST 125" 数字因系统而异。

对于第一个问题,您可以遍历目标文件夹中的所有文件,并检查文件路径是否具有.cal扩展名。

对于第二个问题,您可以使用 Regular Expressions 来匹配目标字符串之后的任意数量的数字。模式应该是这样的:

\bPARALLEL_VOLTAGE_TEST \d+\b
  • \b 断言 word boundary 的位置(以防止匹配部分 words/numbers)。

  • \d+ 匹配一个或多个数字。

  • 如果号码始终由 3 位数字组成,您可以将 \d+ 替换为 \d{3}

  • 如果您要匹配的字符串必须位于行首,您可以将第一个 \b 替换为 ^ anchor.

这是一个完整的例子:

Option Explicit

Dim objFso, objFolder, objFile, objOtF, cd, content

Dim targetDir
targetDir = "C:\Users\username\Desktop\"

Dim objRegExp
Set objRegExp = New RegExp
objRegExp.Pattern = "\bPARALLEL_VOLTAGE_TEST \d+\b"

Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objFolder = objFSO.GetFolder(targetDir)

For Each objFile in objFolder.Files
    If LCase(Right(objFile.Name, 4)) = ".cal" Then
        cd = objFile.Name

        Set objOtF = objFso.OpenTextFile(cd, 1)
        content = objOtF.ReadAll
        objOtF.Close

        Set objOtF = objFso.OpenTextFile(cd, 2)
        objOtF.Write objRegExp.Replace(content, "PARALLEL_VOLTAGE_TEST 180")
        objOtF.Close
    End If
Next