@ECHO OFF
SETLOCAL
:temploop
(SET tempfile="%temp%\temp%random%.#$#")
IF EXIST %tempfile% GOTO temploop
(FOR /f "delims=" %%x IN (myfile.ini) DO (
>%tempfile% ECHO %%x
FINDSTR /b "Extmgr_Addins=" <%tempfile% >NUL
IF ERRORLEVEL 1 (ECHO.%%x) ELSE (
FIND "mc" <%tempfile% >NUL
IF ERRORLEVEL 1 (ECHO %%x,mc) ELSE (ECHO %%x)
)
)
)>newfile.ini
DEL %tempfile%
ECHO ==== original file =====
type myfile.ini
ECHO ==== modified file =====
type newfile.ini
ECHO ==== differences =====
FC myfile.ini newfile.ini
ECHO ==== end of report =====
GOTO :eof
結果:
tempfile="c:\temp\temp8291.#$#"
==== original file =====
notthisline
Extmgr_Addins=notargetstring
Extmgr_Addins=mchastargetstring
Extmgr_Addins=hastargetatendmc
Extmgr_Addins=notbeginsnotargetstring
Extmgr_Addins=notbeginsmchastargetstring
Extmgr_Addins=notbeginshastargetatendmc
mcinthisline
thislinehasmctoo
andat the end mc
mc and Extmgr_Addins=
Extmgr_Addins=finally !@#$%^&*()_+|\=-0<>,./?:;'[]{}"
Extmgr_Addins=mc finally !@#$%^&*()_+|\=-0<>,./?:;'[]{}"
==== modified file =====
notthisline
Extmgr_Addins=notargetstring,mc
Extmgr_Addins=mchastargetstring
Extmgr_Addins=hastargetatendmc
Extmgr_Addins=notbeginsnotargetstring
Extmgr_Addins=notbeginsmchastargetstring
Extmgr_Addins=notbeginshastargetatendmc
mcinthisline
thislinehasmctoo
andat the end mc
mc and Extmgr_Addins=
Extmgr_Addins=finally !@#$%^&*()_+|\=-0<>,./?:;'[]{}",mc
Extmgr_Addins=mc finally !@#$%^&*()_+|\=-0<>,./?:;'[]{}"
==== differences =====
Comparing files myfile.ini and NEWFILE.INI
***** myfile.ini
notthisline
Extmgr_Addins=notargetstring
Extmgr_Addins=mchastargetstring
***** NEWFILE.INI
notthisline
Extmgr_Addins=notargetstring,mc
Extmgr_Addins=mchastargetstring
*****
***** myfile.ini
mc and Extmgr_Addins=
Extmgr_Addins=finally !@#$%^&*()_+|\=-0<>,./?:;'[]{}"
Extmgr_Addins=mc finally !@#$%^&*()_+|\=-0<>,./?:;'[]{}"
***** NEWFILE.INI
mc and Extmgr_Addins=
Extmgr_Addins=finally !@#$%^&*()_+|\=-0<>,./?:;'[]{}",mc
Extmgr_Addins=mc finally !@#$%^&*()_+|\=-0<>,./?:;'[]{}"
*****
==== end of report =====
最初の数行は、有効な一時ファイル名の確立を扱います。
私たちはその後
- 一行読む
- 一時ファイルにダンプします
- 対象の文字列で始まる行を確認します
- 見つからない場合 (エラーレベル 1) 行を ECHO します
- 見つかった場合 (エラーレベル 1 ではないため、エラーレベルは 0)
- 「mc」の存在を確認します
- 見つからない場合は、「,mc」が追加された行を出力し、それ以外の場合はその行を出力します
次に、tempfile を削除し、レポートを表示します。 元の MYFILE.INI を使用した 出力 NEWFILE.INI とそれらの違い。
検査中の行を一時ファイルに書き込むということは、バッチのリダイレクタである<
やのような厄介な文字が適切に処理されることを意味します。>
通常の方法は ですがECHO %%x|findstr...
、>
パイプに詰まってエラー メッセージが漏れます。
唯一の問題は、空の行と、おそらく「;」で始まる行です。出力から削除されますが、スペースだけで構成される行は保持されます...