- ベストアンサー
DOSのバッチで、テキストファイル中の文字を置換したい
いつもお世話になっております。 WindwsXPでDOSバッチを使ってテキストファイル中にある文字列1を文字列2に置換したいのです。 ネットをさまよっていて、こんな例を見つけました。 (参考にしたのはここです。http://www.fpcu.jp/dosvcmd/bbs/log/cat3/cat54/2-0391.html) ====================== @echo off if "%1"=="" goto end set fname=%1 copy %fname% org >nul type nul >%fname% for /f "tokens=1* delims=" %%a in ( org ) do (set line=%%a&& call :sub) del org goto end :sub :この1行下の acb=xyz に置換前と置換後の文字列を指定する。 set l=%line:abc=xyz% echo %l%>>%fname% goto :EOF :end ====================== これをsample.batという名前で保存し、DOSのウィンドウでsample < a.txt と打つと、a.txtファイル中の"abc"が"xyz"に置き換わります。 これに手を入れて置換前と置換後の文字列を可変にしたく思い、sub中に set mae=abc set ato=xyz の2行を加え、変数に値を設定するようにしました。 ところが、次の1行の書き変え方がわかりません。 set l=%line:abc=xyz% を set l=%line:%abc%=%xyz%% のように変えてみましたが、うまく動きません。 どなたかご教授いただけませんか。DOSだけでファイル中の文字列の置換ができればset文を使う使わないにはこだわりません。
- みんなの回答 (8)
- 専門家の回答
お礼
さっき気づいたのですが、pita-goraさんには前の質問でもお世話になっていたのでした。 http://okwave.jp/qa4253093.html 今回も丁寧な説明、ありがとうございます。たぶんどの本にも載っていないことなのでしょうね。 >このcall文の記述だと set l=%line:abc=xyz% という1行のバッチを呼び出しているのと同等の動作になります。 別バッチにしなくても別バッチのような動きをするのですね。 >◆単純に set l=%line:%mae%=%ato%% とした場合なぜうまくいかないか むずかしいことをやさしく解説してくださって感激です。 >余談ですがバッチ実行時にどのように置き換えられるか見たい場合は、 >バッチ先頭のecho offの行を取って実行するとよく分かります。 やってみました。 echo offは何も考えずにつけていましたが、これからハマったときははずしてみます。