::请设置一个文本中不包含的字符,这里我预设为¥,
::如果你的文本中包含,请自行修改,比如设为# $ 等。
set "char=¥"
::设置处理的文本
set "file=D:\holle.txt"
call :replace
for /f "delims=" %%a in (tmp.txt$) do (
set var=%%a
set var=!var:^<string name%char%"holle"^>123^</string^>=^<string name%char%"holle"^>456^</string^>!&echo !var:%char%==!>>new_file.txt
)
del tmp.txt$
pause&goto :eof 2>nul
:replace
for /f "tokens=1* delims==" %%a in ('type "%file%"') do (
set temp=%%a%char%%%b
call :loop
)
goto :eof 2>nul
:loop
for /f "tokens=1* delims==" %%m in ("!temp!") do (
set temp=%%m%char%%%n
if not "%%n"=="" (goto loop) else echo !temp:~0,-1!>>tmp.txt$
)
以上部分代码来源于网络,新的文本在脚本目录下生成,名为“new_file.txt”
先测试,看2.txt 批处理放1.txt同位置运行或文件名带全路径 如把代码中的 :: 去掉就是直接改原文件,
第2~5行可据实改
2:文件名
3:字符串 (据此定位替换所在行)
4:字符串(据此定位其后的=" " )
5:字符串 (设定的新值)
代码中▲为估计原文中不会出现的字符,如有则换成别的
原文那双引号中未知的被替换的部分必须有内容至少一字符,空格也行,否则出错
@echo offset "fn=1.txt"
set "s1=property"
set "s2=value"
set "s3=newstr"
for /f "delims=:" %%i in ('type "%fn%"^|findstr/inc:"%s1%"')do set #%%i=y
(for /f "tokens=1* delims=:" %%i in ('type "%fn%"^|findstr/n .*')do (
set "h=%%j"
if defined #%%i (
setlocal enabledelayedexpansion
for /f "tokens=1* delims=▲" %%k in ("!h:%s2%=%s2%▲!")do (
endlocal
for /f tokens^=2*delims^=^" %%m in ("%%l")do echo %%k="%s3%"%%n
))else echo.%%j
))>2.txt
:: move 2.txt "%fn%"
pause
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)