用批处理删除txt中指定的行和替换指定的行,以及添加指定的行.(用C++语言也行,最后是bat)


在上面的op3.txt中,删除红色框框所在的行,替换绿色框框所在的行,在ENDSEC后添加两行(如紫色框所示)。
即删除第7行到第12行,以及第21行到第22行,
替换第15行的100<———>62
替换第16行的AcDbEntity<---->1
添加0
添加EOF

@echo off
setlocal enabledelayedexpansion
set ctr=0
for /f "delims= tokens=* eol=" %%a in (op3.txt) do (
 set c=%%a
 set /a ctr=ctr+1
 if !ctr! leq 12 (
   for /l %%b in (1,1,6) do (
   if !ctr!==%%b echo !c!>>op3n.txt
   )
   for /l %%b in (7,1,12) do (
   if !ctr!==%%b break
   )
 ) else (
 break
 )
 if !ctr! gtr 12 (
  for /l %%b in (13,1,14) do (
   if !ctr!==%%b echo !c!>>op3n.txt
  )
   if !ctr!==15 echo ^6^2>>op3n.txt
   if !ctr!==16 echo ^1>>op3n.txt
  for /l %%b in (17,1,20) do (
   if !ctr!==%%b echo !c!>>op3n.txt
  )
  for /l %%b in (23,1,26) do (
   if !ctr!==%%b echo !c!>>op3n.txt
  )
 ) else (
  break
 )
)
:final
echo   ^0>>op3n.txt
echo  EOF>>op3n.txt

把这个bat放在op3.txt旁运行,多出来的op3n.txt就是修改好的。(适用于所有的txt)

追问

你的结果是:

 

而我想要的下面的结果:

能否把你的代码再改进一下,以达到我要的效果。

追答

我的代码在我的电脑上测试成功,我的系统是WIN7,你是想要把1-2行也去掉吧。

@echo off
setlocal enabledelayedexpansion
set ctr=0
rem "delims= tokens=* eol=" 指的是以回车符为分隔符(delims=),取所有的文本内容(tokens=*),不忽略任何行(eol=),如果还是不行就在"delims= tokens=* eol="中加一个usebackq就像这样:"delims= tokens=* usebackq eol="
for /f "delims= tokens=* eol=" %%a in (op3.txt) do (
 set c=%%a
 set /a ctr=ctr+1
 if !ctr! leq 12 (
   for /l %%b in (3,1,6) do (
   if !ctr!==%%b echo !c!>>opEnd.txt
   )
 ) else (
 break
 )
 if !ctr! gtr 12 (
  for /l %%b in (13,1,14) do (
   if !ctr!==%%b echo !c!opEnd.txt
  )
   if !ctr!==15 echo ^6^2opEnd.txt
   if !ctr!==16 echo ^1>>opEnd.txt
  for /l %%b in (17,1,20) do (
   if !ctr!==%%b echo !c!>>opEnd.txt
  )
  for /l %%b in (23,1,26) do (
   if !ctr!==%%b echo !c!>>opEnd.txt
  )
 ) else (
  break
 )
)

   

温馨提示:答案为网友推荐,仅供参考
相似回答