VBSの質問です

http://q.hatena.ne.jp/1373424817 の質問の続きなのですが
htmlの文字コード変換を
hogeフォルダ以下の全サブフォルダ 孫フォルダに適応させたいのですが
その場合どのように書けばいいのでしょうか?
教えてください

回答の条件
  • 1人5回まで
  • 登録:
  • 終了:2013/07/12 04:29:52
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

ベストアンサー

id:a-kuma3 No.1

回答回数4973ベストアンサー獲得回数2154

ポイント300pt

前の回答の処理をサブルーチンにして、フォルダを再帰的に処理するようにします。

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 が変換後のファイルを置くフォルダです。

id:takanii

ありがとうございました!

2013/07/12 04:29:46

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません