バッチでHTMLファイル内の書き換えを行いたいのですが、置換文字列にイコールや不等号が含まれる場合はどうしたらいいのでしょうか。

バッチでHTMLファイル内の書き換えを行いたいのですが、置換文字列にイコールや不等号が含まれる場合はどうしたらいいのでしょうか。 ”ダブルコーテーションや’シングルコーテーションで囲ってみたりしてみましたが、出来ませんでした。 OSはWindows10、バッチ内に日本語が含まれるので、文字コードはANSIにしています。素人です。 具体的には、A.html 内の <BODY> を <BODY style="background-color: #006600"> に、 <A HREF="#">先頭 を <br><br><br><br><A HREF="#">先頭 に書き換えて、 B.html に出力する為、このように記述してみたのですが…。 @echo off setlocal enabledelayedexpansion for /f "delims=" %%a in (A.html) do ( set line=%%a set line=!line:<BODY>=<BODY style="background-color: #006600">! set line=!line:<A HREF="#">先頭=<br><br><br><br><A HREF="#">先頭! echo !line! >> B.html ) endlocal ご教示ください。よろしくお願いいたします。

HTML、CSS | Visual Basic47閲覧xmlns="http://www.w3.org/2000/svg">50

ベストアンサー

0

「VBScript」による回答ですので、ダメしたら、無視してください。 以下のプログラムを、メモ帳かテキストエディタに貼り付け、「~.vbs」という名前で保存してください(保存する際は、必ず、文字コードを「Shift-JIS(ANSI)」で保存してください)。 もちろん、「~」の部分は、何でもかまいません。 できたプログラムファイル(「~.vbs」ファイル)を処理したいファイルの存在するフォルダに放り込んで、ダブルクリック(「シングルクリック」→「Enter」の方が確実)してください。 最後に「Finished!」と表示しますので、「OK」を押して、終了してください。 ★★★注意事項★★★ 今は、「Shift-JIS(ANSI)」ということで、テキストファイルで試しています。 7行目の Set tx = so.OpenTextFile(f & "\a.txt", 1) を、「a.html」に、 14行目の Set tx = so.OpenTextFile(f & "\b.txt", 2, True) を、「b.html」に変更してから、実行してください。 Option Explicit Dim a, b, f, i, so, tx, x b = Array("<BODY>", "<A HREF=" & Chr(34) & "#" & Chr(34) & ">先頭") a = Array("<BODY style=" & Chr(34) & "background-color: #006600" & Chr(34) & ">", "<br><br><br><br><A HREF=" & Chr(34) & "#" & Chr(34) & ">先頭") Set so = CreateObject("Scripting.FileSystemObject") f = so.GetParentFolderName(WScript.ScriptFullName) Set tx = so.OpenTextFile(f & "\a.txt", 1) x = tx.ReadAll tx.Close Set tx = Nothing For i = 0 to UBound(b) x = Replace(x, b(i), a(i)) Next Set tx = so.OpenTextFile(f & "\b.txt", 2, True) tx.Write x tx.Close Set tx = Nothing Set so = Nothing MsgBox("Finished!") 説明が必要でしたら、言ってください。

おお!ありがとうございます。ただ今回質問したのはバッチファイルの一部分で実際にVBSでの運用となると、他の部分もVBSに書き換えなければならないのですが、この置換作業を複数のHTMLファイルに対して行う場合はどのように記述したらよいでしょうか?a.htmlだけでなく、実際には、a1.html a2.html a3.html …と複数あるのです。バッチなら、コピペしてファイル名だけ変えたものをそのまま繋げれば済むのですが、VBSの場合は関数を新たに設定しないとダメでしょうか?VBSはまったく初めてで、ものすごく初歩の質問をしているかと思いますが、よろしくお願いいたします。

ThanksImg質問者からのお礼コメント

この度はお二人とも、大変お世話になりました。どちらか一方を選ぶのは悩みましたが、ドラッグ&ドロップではない方法で変換作業を行いたかったので、 Prometheusさんのアンサーをベストアンサーとさせて頂きました。本当にありがとうございました。

お礼日時:8/13 17:59

その他の回答(1件)

1

回答でなくてすみません。 そのような文字列処理を BAT で書くのは、可能かもしれませんが労力が割に合わない気がします。 VBS や PowerShell で正規表現を使用すれば、数行で終わる処理ですので、これを機会に他の方法を検討してみてはどうでしょうか。

1人がナイス!しています

ありがとうございます。VBSの使用を検討しようと思います。ただ、今回質問に書いたのは長いバッチファイルの一部分なので、全部置き換えられるかどうか。。。頑張ります。