如何根据扩展名查找文件并动态替换文本?
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
我试图在文件扩展名为 .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