替换文本指定行数里,=号之后的内容,该怎么写这批处理?

比如文本内容为:
文本名 1.txt

[abc]

abcde=12345
bcde=2345
qwe=345

我想第四行qwe=345, 替换成 qwe=543.

for /f "skip=3" %%i in (1.txt) do (
set/a n+=1
if !n! equ 4

这之后我就不知道该怎么写下去了,请高手指点下啊...
这个345不是一个固定值.但qwe=是一个固定的值.
请指教下.

@Echo Off&Setlocal Enabledelayedexpansion
for /f "tokens=1* delims==" %%i in (1.txt) do (
set/a n+=1
(if !n! equ 4 (Echo %%i=456) else (If not "%%j"=="" (Echo %%i=%%j) else (Echo %%i)))>>2.txt
)
Pause

qwe=在固定行可以这样写.下面的代码是qwe=在不确定行(qwe=在任意行)

@Echo Off&Setlocal Enabledelayedexpansion
for /f "tokens=1* delims==" %%i in (1.txt) do (
(If "%%i"=="qwe" (Echo %%i=456) else (If not "%%j"=="" (Echo %%i=%%j) else (Echo %%i)))>>2.txt
)
Pause

追问

没看明白,也不行啊.qwe=确定在一个固定行,但我要修改成的内容不固定是456.

追答

你想要怎样修改呢,用变量?

追问

是啊,我首先判断行数,if !n! equ 4 ,行数确定以后,内容就是,qwe=345,然后qwe=又是固定值,就是判断=号以前的内容忽略,或者做为条件搜索,再修改=号以后的内容啊.要修改的内容也不是固定值,但是是我自己给他赋予的值,是我已知的值.

追答

你直接把456改成变量就行了,替换代码已经写好了的,只需要修改成变量即可.

@Echo Off&Setlocal Enabledelayedexpansion
Set var=456
Rem 设置变量
for /f "tokens=1* delims==" %%i in (1.txt) do (
set/a n+=1
(if !n! equ 4 (Echo %%i=%var%) else (If not "%%j"=="" (Echo %%i=%%j) else (Echo %%i)))>>2.txt
)
Move 2.txt 1.txt
Pause

温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-10-17

@echo off

setlocal enabledelayedexpansion

set /p wen=345要换成的内容:

set a=0

for /f "tokens=*" %%i in (1.txt) do (

set /a a+=1

if !a!==4 (

set value=%%i

set "value=!value:345=!"

echo !value!%wen%>>2.txt

) else (echo %%i>>2.txt)

)


    把要替换成的内容输入给变量wen

    遍历1.txt,当a=4时,把第4行内容中的345换成空

    并把剩下的内容和变量wen的内容一起输出到2.txt

    else ,a不等于4的情况,则正常输出到2.txt

    不想生成2.txt,调用jd08139的move 2.txt 1.txt加在最后即可(另起一行)

第2个回答  2013-10-17
@setlocal enabledelayedexpansion
set tgtline=3
set newval=543
set line=0
for /f %%a in (1.txt) do (
set /a line=line+1
if !line!==%tgtline% (
for /f "tokens=1 delims==" %%b in ("%%a") do (
echo %%b=%newval%>>a.tmp
)
) else (
echo %%a>>a.tmp
)
)
copy /y a.tmp 1.txt
del /q a.tmp
当然还有一个更好的工具sed
相似回答