http://q.hatena.ne.jp/1373424817 の質問の続きなのですが
htmlの文字コード変換を
hogeフォルダ以下の全サブフォルダ 孫フォルダに適応させたいのですが
その場合どのように書けばいいのでしょうか?
教えてください
前の回答の処理をサブルーチンにして、フォルダを再帰的に処理するようにします。
Sub ConvCharset(fromFile, toFile) Set objStream = WScript.CreateObject("adodb.stream") objStream.Type = 2 objStream.Charset = "Shift_JIS" objStream.Open objStream.LoadFromFile(fromFile) ' Shift-JIS のファイルを読み込み txt = objStream.ReadText() objStream.Close() objStream.Open() objStream.Position = 0 objStream.Charset = "UTF-8" ' UTF-8 でファイルへ書き込み objStream.WriteText txt objStream.SaveToFile(toFile) objStream.Close Set objStream = Nothing End Sub Sub ConvCharsetAll(targetFolder) Dim fs, folder Set fs = WScript.CreateObject("Scripting.FileSystemObject") Set folder = fs.getFolder(targetFolder) For Each f In folder.Files f_utf8 = f.ParentFolder.Path & "\" & _ fs.GetBaseName(f.Path) & "_u" & "." & _ fs.GetExtensionName(f.Path) call ConvCharset (f.Path, f_utf8) Next For Each f in folder.SubFolders call ConvCharsetAll(f) Next End Sub ' hoge を変換対象にする Call ConvCharsetAll ("hoge")
変換元のファイル名の末尾に、"_u" をつけたものを変換後のファイルとしています。
例えば、hoge\a.html は、hoge\a_u.html に変換されます。
同じところに、ふたつファイルができても、あまりうれしくないかと思い、別のフォルダに変換後のファイルをつくるのも書いてみました。
Sub ConvCharset(fromFile, toFile) Set objStream = WScript.CreateObject("adodb.stream") objStream.Type = 2 objStream.Charset = "Shift_JIS" objStream.Open objStream.LoadFromFile(fromFile) ' Shift-JIS のファイルを読み込み txt = objStream.ReadText() objStream.Close() objStream.Open() objStream.Position = 0 objStream.Charset = "UTF-8" ' UTF-8 でファイルへ書き込み objStream.WriteText txt objStream.SaveToFile toFile, 2 objStream.Close Set objStream = Nothing End Sub Sub ConvCharsetAll(targetFolder) Dim fs, folder Set fs = WScript.CreateObject("Scripting.FileSystemObject") Set folder = fs.getFolder(targetFolder) For Each f In folder.Files call ConvCharset (f.Path, f.Path) Next For Each f in folder.SubFolders call ConvCharsetAll(f) Next End Sub fromFolder = "hoge" ' 変換元のファイルがあるフォルダ toFolder = "hoge_u" ' 変換後のファイルを置くフォルダ Set fs = WScript.CreateObject("Scripting.FileSystemObject") fs.CopyFolder fromFolder, toFolder ConvCharsetAll toFolder
フォルダを複製して、上書きで変換しているだけですけど。
最後の方に書いてある fromFolder が変換元のファイルがあるフォルダで、toFolder が変換後のファイルを置くフォルダです。
ありがとうございました!
2013/07/12 04:29:46