测试文本文件1111.txt内容如下:
111111111
111"222"111
111111111
444444444
fgjjllkugf
目的是将第二行双引号中的222替换成8888888
替换结果如下:
111111111
111"88888888"111
111111111
444444444
fgjjllkugf
批处理代码如下:- @echo off
- setlocal enabledelayedexpansion
- for /f "delims=" %%a in ('type "1111.txt"^|find /n "222"') do
- set str=%%a
- for /f tokens^=1-2*delims^=^" %%i in ("%str%") do (
- set substr=%%j
- set replace=888888888
- echo !substr!
- call set "str=%%str:!substr!=!replace!%%"
- echo !str!>>1111.txt
- )
- pause
复制代码 但执行结果确实将解析替换好的字符串111"888888888"111写到了文件最后一行
我觉得语句for /f "delims=" %%a in ('type "1111.txt"^|find /n "222"')是按行执行的,到文件第二行时发现字符串“222”,在执行到第三行之前,执行后面所有的语句,改成下面这样反而出现了语法错误,结果一闪就消失了- @echo off
- setlocal enabledelayedexpansion
- for /f "delims=" %%a in ('type "1111.txt"^|find /n "222"') do
- (
- set str=%%a
- for /f tokens^=1-2*delims^=^" %%i in ("%str%") do (
- set substr=%%j
- set replace=888888888
- echo !substr!
- call set "str=%%str:!substr!=!replace!%%"
- echo !str!>>1111.txt
- )
- )
- pause
复制代码 前辈帮帮忙!能让最后这个变量echo !str!把原文本第二行替换掉 |