0

我有一个关于简单 VBScript 的基本问题。我的目标是在多个文件中找到替换多个文本字符串。(要替换的 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 循环数吗?

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

4

1 回答 1

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.txtor的文件名,则prefix_##.otherextension必须添加进一步检查以将它们排除在处理之外。

于 2013-03-15T08:25:09.447 回答