[前の記事]« バッチファイルを直接起動すると無限ループしてしまう
[次の記事]DIRとFINDの組み合わせでフォルダ名とファイル名を検索 »

関連オンラインソフト配布サイト:
Vector>ダウンロード(top) |>MS-DOSまたは汎用 | >WindowsVista/XP/2000/NT

▲カテゴリー「リダイレクト(> <)、パイプ( | )、その他の特殊記号」索引へ
▲カテゴリー「文字列の操作」索引へ

<、|、>を含むファイル中の文字列を順次置換するバッチ処理

1017.
[win2000/XP]ファイル中の文字列を置換するバッチ処理
2006年02月18日(土) 00時31分
シャーク
どういうことがやりたいのかを説明させて貰います
まず、c:\aaa\aaa.htmlというファイルがあります。
また、c:\bbb\bbb.txtには置換対象の文字列が
格納されています
この"aaa.html"ファイルの内容は、
以下のような感じです

//////aaa.html///////////
<html>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<TABLE cellSpacing=0 cellPadding=0 width=550 border=0>
<A href="http://xxxx.jp">---=_Next_=---</A>
</html>
//////////////////////

置換対象はbbb.txt下記のような感じで
上から順に置換対象の文字列が格納されています
このファイルにはリダイレクト文字等は含まれません

////////bbb.txt////////
hogehoge.com
hoge.jp
hogehoge.net
///////////////////////

こののような< | > = を含むファイルでの
指定ファイルへ置換処理をバッチ処理で
xxxx.jpが置換前文字列だとして
bbb.txt内の1行目から順に
xxx.jp -> hogehoge.comのように
置換してaaa.htmlは上書き処理をする
このような処理行いたいのですが上手くいきません。
どなたかご存知でしたら教えて頂けないでしょうか?
よろしくお願い致します。
1019.
Re:[win2000/XP]ファイル中の文字列を置換するバッチ処理
2006年02月18日(土) 12時27分
otn
>どういうことがやりたいのかを説明させて貰います
>まず、c:\aaa\aaa.htmlというファイルがあります。
>また、c:\bbb\bbb.txtには置換対象の文字列が
>格納されています
>この"aaa.html"ファイルの内容は、
>以下のような感じです

バッチスクリプトの文字列処理機能は、文字列置換にしても英大文字小文字が区別できないとか、特殊文字の処理が困難とかあまり本格的な文字列処理には向きません。
この程度の処理なら、できればPerlかRuby、それらのインストールが面倒でも、awk か sed なら exeファイル1つのインストールだけで済むので何らかの外部プログラムを使うのがいいと思います。
標準ソフトにこだわるなら、VBScript+WSHで。
シャークさんが悩まれた特殊文字処理のような「処理の本質と無関係な部分」で悩まなくて済みます。

あと、初心者ではなさそうなので、「こういうスクリプトを書いたが、こういう場合にうまく行かない」とかは書きましょう。

>xxxx.jpが置換前文字列だとして
>bbb.txt内の1行目から順に
>xxx.jp -> hogehoge.comのように
>置換してaaa.htmlは上書き処理をする

置換対象と、bbb.txtの関係がよくわかりません。置換元がxxxx.jpと1つなのにbbb.txtが3行ありますが、どうするのですか?

とりあえず、xxxx.jp を hogehoge.com に置換するとすると、

@echo off
(for /f "delims=" %%A in (aaa.html) do (
 >tmp.tmp echo %%A
 call :sub
))>aaa.out
move aaa.out aaa.html
goto :eof
:sub
set /P A=<tmp.tmp
set "A=%A:"=〓%"
set "A=%A:xxxx.jp=hogehoge.com%" ←この行を変更
setlocal enabledelayedexpansion
echo !A:〓="!
endlocal

で行けるんじゃないかと思います。〓の部分は、aaa.htmlに含まれない文字。もし含まれない文字が予め決められなければ、JIS規格に無いWindows独自文字を書いておけばいいと思います。シフトJIS文字コード表の後ろのほうのやつ。

空行が消えるというfor /fの制約を除けば多分大丈夫と思いますが、あらゆるケースをテストは出来ないので、うまく行かないケースがあれば教えてください。

bbb.txt を使うなら、「bbb.txtを読んで置換のSET文をtmp.batに生成する」処理をまず書いて、上記の置換のSET文をcall tmp.batに変えれば良いと思います。
1021.
Re:[win2000/XP]ファイル中の文字列を置換するバッチ処理
2006年02月18日(土) 13時16分
otn
ちょっと訂正。ファイル経由で渡す必要は無いですね。ちょっと別のケースと勘違いしました。

@echo off
(for /f "delims=" %%A in (aaa.html) do (
 set A=%%A
 call :sub
))>aaa.out
move aaa.out aaa.html
goto :eof
:sub
set "A=%A:"=〓%"
set "A=%A:xxxx.jp=hogehoge.com%" ←この行を変更
setlocal enabledelayedexpansion
echo !A:〓="!
endlocal

 
 


カテゴリー「リダイレクト(> <)、パイプ( | )、その他の特殊記号」索引へ
カテゴリー「文字列の操作」索引へ

 

カテゴリー一覧

FPCU/FPCDIY QUICK LINK online
この上の各ジャンル名をクリックすると、下のウィンドウが切り替わります▼


=リンク集のインデックスはこちら=

資料書籍

About

2006年02月18日 10:21に投稿されたエントリーのページです。

ひとつ前の投稿は「バッチファイルを直接起動すると無限ループしてしまう」です。

次の投稿は「DIRとFINDの組み合わせでフォルダ名とファイル名を検索」です。

他にも多くのエントリーがあります。メインページアーカイブページも見てください。

This site is powered by Six Apart
Movable Type 3.33-ja
このブログについて | 運営:有限会社メディアポート