@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”的行,否则只输出该行
然后删除临时文件并显示一个报告: 原来的MYFILE.INI 使用了输出NEWFILE.INI 和它们之间的区别。
将正在检查的行写入临时文件意味着可以正确处理像<
和批量重定向器这样的尴尬字符。>
正常的方法是卡在管道中ECHO %%x|findstr...
并>
泄漏错误消息。
关于唯一的问题是空行和可能以';'开头的行 将从输出中删除,但将保留包含唯一空格的行...