如何使用Visual Basic查找和替换多个文件中的文本字符串

时间:2013-03-15 04:08:55

标签: string vbscript replace

我有一个关于简单的vbs脚本的基本问题。我的目标是在多个文件中找到替换多个文本字符串。 (要替换的21个文本字符串在文件中是相同的。)文件名大约有12个前缀,最后将有1到200个数字。我正在使用其中一个文件中的一个字符串的基本代码如下。

Const ForReading = 1
Const ForWriting = 2

Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objFile = objFSO.OpenTextFile("C:\filename_XX.txt", ForReading)

strText = objFile.ReadAll
objFile.Close
strNewText = Replace(strText, "Test 1", "Test 2")

Set objFile = objFSO.OpenTextFile("C:\filename_XX.txt", ForWriting)
objFile.Write strNewText
objFile.Close

我只想循环遍历文件名,并可能遍历搜索字符串。 For ... Next循环可以完成吗?我可以参考文件名对象中for循环的编号吗?

我已经看到了关于搜索子文件夹的响应,但我认为它比我需要做的更复杂。

1 个答案:

答案 0 :(得分:1)

如果文件位于同一目录中且所有文件都有prefix_##.txt这样的文件名,您可以执行以下操作:

Set fso = CreateObject("Scripting.FileSystemObject")

Set prefixes = CreateObject("Scripting.Dictionary")
prefixes.CompareMode = vbTextCompare 'make dictionary lookups case-insensitive
prefixes.Add "prefix1", True
prefixes.Add "prefix2", True
'...

For Each f In fso.GetFolder("C:\basefolder").Files
  If InStr(f.Name, "_") > 0 Then
    If prefixes.Exists(Split(f.Name, "_")(0)) Then
      text = fso.OpenTextFile(f.FullName).ReadAll
      text = Replace(text, "Test 1", "Test 2")
      fso.OpenTextFile(f.FullName, 2).Write text
    End If
  End If
Next

如果要使用文件名的数字部分,则必须从文件名中提取它,例如像这样:

num = Split(fso.GetBaseName(f.Name), "_")(1)

如果您的文件不在同一个目录中,则需要递归到子文件夹中。此外,如果您有prefix_##somethingelse.txtprefix_##.otherextension等文件名,则必须添加进一步检查才能将其排除在处理之外。