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

2024-12-19 00:37:01
推荐回答(2个)
回答1:

很赞同一楼观点,看来楼主也是会批处理的,我写一个不为解答具体问题,仅与楼主及各位交流,尽量减少局限性和加快处理速度(特别是需要替换的行较少时),一行可以有多处等号,估计存在的局限性除全文 ! 符会丢失外只是在需要替换的行: 不能有><&| 等特殊符,行首行尾有 = 会丢失 ,有连续 == 会变为单个 =

@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

回答2:

@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
这个有限制性,只能根据你给的文本做处理。