批处理for命令文本替换,被替换内容中有等号的问题 20

setlocalENABLEDELAYEDEXPANSIONfor/f"tokens=*"%%iin(1.txt)do(setvar=%%isetvar=!var:abc... setlocal ENABLEDELAYEDEXPANSION
for /f "tokens=*" %%i in (1.txt) do (
set var=%%i
set var=!var:abc=123=abc=456!
echo !var!>>2.txt
)
pause
在1.txt中查找abc=123,然后替换成abc=456,如果按我上边那样写,原来abc=123的位置被替换成了123=abc=456=123,显然是把第一个遇到的等号当做运算符,而把后边的等号当做文本了。
我试过
set var=!var:"abc=123"="abc=456"!(加双引号)
set var=!var:'abc=123'='abc=456'!(加单引号)
set var=!var:abc^=123=abc^=456!
都达不到预期效果。求高人帮助,非常感谢!!
另外,我那个文本里有许多空白行,用上面的语句处理后,空白行都没了,有没有办法保留那些空白行?
1.txt里是这样
abc=123
123456
abc=456
bcd=456
——————————————————
不仅要把abc=123替换成abc=456
还要把下面的bcd=456替换成bcd=123
set语句改怎么写?
展开
 我来答
yyykkkyyyy
2011-04-18 · TA获得超过3136个赞
知道大有可为答主
回答量:2691
采纳率:40%
帮助的人:3315万
展开全部
很赞同一楼观点,看来楼主也是会批处理的,我写一个不为解答具体问题,仅与楼主及各位交流,尽量减少局限性和加快处理速度(特别是需要替换的行较少时),一行可以有多处等号,估计存在的局限性除全文 ! 符会丢失外只是在需要替换的行: 不能有><&| 等特殊符,行首行尾有 = 会丢失 ,有连续 == 会变为单个 =

@echo off&setlocal enabledelayedexpansion
for /f "tokens=1* delims=:" %%a in ('findstr/n "abc=123 bcd=456" "a.txt"')do (
cls&echo/&echo 正在处理第 %%a 行
set h=%%b&call :yky
set h%%a=!h!)
cls&echo/&echo 正在写入文件
(for /f "tokens=1* delims=:" %%c in ('findstr/n ".*" "a.txt"')do (
if defined h%%c (echo.!h%%c!)else echo.%%d))>b.txt
start b.txt
exit
:yky
for /f "tokens=1* delims==" %%f in ("%h%")do (
if not "%%g"=="" set h=%%fゅ%%g&goto yky)
set h=%h:abcゅ123=abcゅ456%
set h=%h:bcdゅ456=bcdゅ123%
set h=%h:ゅ==%
goto :eof
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2011-04-18
展开全部
@echo off
setlocal enabledelayedexpansion
set file1=1.txt
set file2=2.txt
for /f "tokens=1* delims=:" %%i in ('findstr /n .* "%file1%"') do (
set var=%%j
if "!var!"=="" (echo.>>%file2%) else (
set a=!var:~,3!
set b=!var:~4,3!
if !a!==abc (if !b!==123 (set var=abc=456))
if !a!==bcd (if !b!==456 (set var=bcd=123))
echo !var!>>%file2%))
pause>nul
exit
这个有限制性,只能根据你给的文本做处理。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式