2013-03-15 28 views
0

我有一個簡單的vbs腳本的基本問題。我的目標是在多個文件中找到替換多個文本字符串。 (要替換的21個文本字符串在文件中是相同的。)文件名有大約12個前綴,然後在末尾具有數字1到200。我用於其中一個文件中的一個字符串的基本代碼如下所示。如何使用Visual Basic在多個文件中查找和替換文本字符串

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 ... For Next循環能完成這個嗎?我可以參考文件名對象中for循環的編號嗎?

我已經看到有關搜索子文件夾的回覆,但我認爲它比我需要做的更復雜。

回答

0

如果這些文件在同一目錄下,並都像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,則必須添加進一步的檢查才能將其排除在處理之外。

+0

非常感謝,這非常有幫助。 – user2172317 2013-03-15 16:30:25

+0

@ user2172317不客氣。如果解決了您的問題,請考慮[接受答案](http://meta.stackexchange.com/a/5235)。 – 2013-03-15 17:50:07

相關問題