批处理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语句改怎么写? 展开
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语句改怎么写? 展开
展开全部
很赞同一楼观点,看来楼主也是会批处理的,我写一个不为解答具体问题,仅与楼主及各位交流,尽量减少局限性和加快处理速度(特别是需要替换的行较少时),一行可以有多处等号,估计存在的局限性除全文 ! 符会丢失外只是在需要替换的行: 不能有><&| 等特殊符,行首行尾有 = 会丢失 ,有连续 == 会变为单个 =
@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
@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
这个有限制性,只能根据你给的文本做处理。
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
这个有限制性,只能根据你给的文本做处理。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询