[前の記事]« [NT系]バッチ処理を関数化して呼び出すには
[次の記事]for /f の eol=のデフォルト値をクリアするには »

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

▲カテゴリー「FIND,FINDSTR,SORT…テキストファイル内文字列の操作」索引へ

テキストファイル内の文字列置換

325.
iniファイルの編集
2005年03月10日(木) 11時17分
さくら
●DOS/Windowsのバージョン↓
2000Pro

iniファイルの内容で特定の文字列を見つけたら
置換する


iniファイルの内容
~~~~~~~
abcdef=789
123456=789
~~~~~~~
「789」を「xyz」に置換したい

この場合、どのようなコマンドを使用して
編集すれば良いのでしょうか?

宜しくお願い致します。
326.
Re:iniファイルの編集
2005年03月10日(木) 16時03分
otn
>●DOS/Windowsのバージョン↓
>2000Pro

>iniファイルの内容で特定の文字列を見つけたら
>置換する

>例
>iniファイルの内容
>~~~~~~~
>abcdef=789
>123456=789
>~~~~~~~
>「789」を「xyz」に置換したい

(1) 行中のどこにどのように 789 があっても xyz に置換する
(2) = の右辺が 789 に完全一致すればそれを xyz に置換する( = は行に1つだけ存在)
(3) その他( = の右辺に 789 が部分的にでも存在すれば。。等)

どれでしょう?(3)の場合は(1)(2)に準じて詳しく書いてください。
327.
Re2:iniファイルの編集
2005年03月10日(木) 16時43分
さくら
すみません、説明不足でした

実行したいのは・・・
(1) 行中のどこにどのように 789 があっても xyz に置換する
  になります。

私なりに作ってみたものは

ECHO abcdef=xyz>>TEST.INI

FIND /V "abcdef=789" TEST.INI >TEMP.INI
COPY /Y TEMP.INI TEST.INI
DEL TEMP.INI

この処理を数回繰り返せばすむんですが、
追記された abcdef=xyz は一番下に表示されてしまうこと、
ヘッダー? のようなファイル名 ---------- C:\TEST.INI が
一番上に表示されてしまうのが気になります

「追記した文字列を何行目に挿入する」
「ヘッダーにファイル名を表示させない」
この2つの問題を解決する手段はありますでしょうか?

宜しくお願い致します。

>>●DOS/Windowsのバージョン↓
>>2000Pro
>>
>>iniファイルの内容で特定の文字列を見つけたら
>>置換する
>>
>>例
>>iniファイルの内容
>>~~~~~~~
>>abcdef=789
>>123456=789
>>~~~~~~~
>>「789」を「xyz」に置換したい

>(1) 行中のどこにどのように 789 があっても xyz に置換する
>(2) = の右辺が 789 に完全一致すればそれを xyz に置換する( = は行に1つだけ存在)
>(3) その他( = の右辺に 789 が部分的にでも存在すれば。。等)

>どれでしょう?(3)の場合は(1)(2)に準じて詳しく書いてください。
328.
Re3:iniファイルの編集
2005年03月10日(木) 17時30分
otn
>すみません、説明不足でした

>実行したいのは・・・
>(1) 行中のどこにどのように 789 があっても xyz に置換する
>  になります。

というのは、A7890=qwert という行も Axyz0=qwert に書き換えることになりますが、それでいいんですか?下記と全然違いますが?

>私なりに作ってみたものは

>ECHO abcdef=xyz>>TEST.INI

>FIND /V "abcdef=789" TEST.INI >TEMP.INI
>COPY /Y TEMP.INI TEST.INI
>DEL TEMP.INI

(1)でいいならば、
copy NUL TEMP.INI
for /f "delims=" %%A in (TEST.INI) do call :sub "%%A"
del TEST.INI
ren TEMP.INI TEST.INI
goto :eof
:sub
set "LINE=%~1"
echo %LINE:789=xyz%>>TEMP.INI
329.
Re4:iniファイルの編集
2005年03月10日(木) 18時38分
さくら
ご回答ありがとうございます。

早速テストしてみたのですが、2行目の

for /f "delims=" %%A in (TEST.INI) do call :sub "%%A"

にて『%%A の使い方が誤っています。』と怒られてしまいます。

変数が間違っているのでしょうか?


>>すみません、説明不足でした
>>
>>実行したいのは・・・
>>(1) 行中のどこにどのように 789 があっても xyz に置換する
>>  になります。

>というのは、A7890=qwert という行も Axyz0=qwert に書き換えることになりますが、それでいいんですか?下記と全然違いますが?

>>私なりに作ってみたものは
>>
>>ECHO abcdef=xyz>>TEST.INI
>>
>>FIND /V "abcdef=789" TEST.INI >TEMP.INI
>>COPY /Y TEMP.INI TEST.INI
>>DEL TEMP.INI

>(1)でいいならば、
>copy NUL TEMP.INI
>for /f "delims=" %%A in (TEST.INI) do call :sub "%%A"
>del TEST.INI
>ren TEMP.INI TEST.INI
>goto :eof
>:sub
>set "LINE=%~1"
>echo %LINE:789=xyz%>>TEMP.INI

330.
Re5:iniファイルの編集
2005年03月11日(金) 00時27分
otn
>早速テストしてみたのですが、2行目の

>for /f "delims=" %%A in (TEST.INI) do call :sub "%%A"

>にて『%%A の使い方が誤っています。』と怒られてしまいます。

そんなはずはないのでタイプミスでしょう。
と、思ったのですが、もしかしてコマンドプロンプトに直接打ち込んでませんか?どうして?
バッチファイルにしないのならわざわざコマンドで修正しないでメモ帳で編集すればいいのでは?
 
 


カテゴリー「FIND,FINDSTR,SORT…テキストファイル内文字列の操作」索引へ

 

カテゴリー一覧

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


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

資料書籍

About

2005年03月10日 17:31に投稿されたエントリーのページです。

ひとつ前の投稿は「[NT系]バッチ処理を関数化して呼び出すには」です。

次の投稿は「for /f の eol=のデフォルト値をクリアするには」です。

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

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