0

簡単な VBScript について基本的な質問があります。私の目標は、複数のファイルで複数のテキスト文字列を置き換えるものを見つけることです。(置換する 21 個のテキスト文字列はファイル間で同じです。) ファイル名には約 12 個のプレフィックスがあり、最後に 1 から 200 の番号が付きます。ファイルの 1 つの文字列の 1 つだけに使用しているコードは次のとおりです。

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.txtまた、またはのようなファイル名がある場合prefix_##.otherextensionは、それらを処理から除外するためにさらにチェックを追加する必要があります。

于 2013-03-15T08:25:09.447 に答える