我有一个关于简单的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循环的编号吗?
我已经看到了关于搜索子文件夹的响应,但我认为它比我需要做的更复杂。
答案 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.txt
或prefix_##.otherextension
等文件名,则必须添加进一步检查才能将其排除在处理之外。