Board logo

标题: [文本处理] 批处理怎样删除文件内特定范围的行? [打印本页]

作者: keshun    时间: 2011-6-23 23:49     标题: 批处理怎样删除文件内特定范围的行?

请教高手,批处理删除A.txt,<def_ip>与<mac2ip>之间行的所有内容,<mac2ip>保留不删,文本各部份N行

A.txt内容:
<ddns>
domain=keshu passwd=hxl desc= user=kes1 isp=33rg line=wan2

<def_ip>
name=2233安 ip=22.33 active=yes mac=0-3e-97
name=2316早 ip=1.23.16 active=yes mac=04d-bc-e5
name=2354捷 ip=23.54 active=yes mac=-38-2e-8f

<dhcp_static>
00-114 192.168.22.11 2211跃
00-e1--4b 192.16.12 2212洋

<mac2ip>
192.168.20.11 90-e6-09 2011文
作者: mxxcgzxxx    时间: 2011-6-24 07:05

FOR /F +IF +函数开关 应该很好解决
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. set "a1=<def_ip>"
  4. set "a2=<mac2ip>"
  5. set a=0
  6. cd.>b.txt
  7. for /f "tokens=*" %%1 in (a.txt) do (
  8.          if "!a1!"=="%%1" set a=1
  9.          if "!a2!"=="%%1" set a=0
  10.          if !a!==0 echo.%%1 >>b.tat
  11.          )
复制代码
也可以用 find 来做开关
作者: zfkzp    时间: 2011-6-24 09:17

2# mxxcgzxxx
这个的效果不是太好,我试了一下,“b.tat”里面的内容如下
  1. <ddns>
  2. domain=keshu passwd=hxl desc= user=kes1 isp=33rg line=wan2
  3. <mac2ip>
  4. 192.168.20.11 90-e6-09 2011文
  5. <ddns>
  6. domain=keshu passwd=hxl desc= user=kes1 isp=33rg line=wan2
  7. <mac2ip>
  8. 192.168.20.11 90-e6-09 2011文
复制代码
b.txt里面的内容则是空的。
不知道有没有违背楼主的意思。
作者: tmplinshi    时间: 2011-6-24 12:34

本帖最后由 tmplinshi 于 2011-6-24 12:35 编辑
  1. @echo off
  2. setlocal disabledelayedexpansion
  3. set "file=a.txt"
  4. set "begin=<def_ip>"
  5. set "end=<mac2ip>"
  6. set "_skip="
  7. findstr /n .* "%file%" >..tmp
  8. (
  9.     for /f "delims=" %%i in (..tmp) do (
  10.         set str=%%i
  11.         setlocal enabledelayedexpansion
  12.         set str=!str:*:=!
  13.         if /i "!str!" == "!begin!" set _skip=#
  14.         if /i "!str!" == "!end!" set _skip=
  15.         if not defined _skip echo,!str!
  16.         for %%i in ("!_skip!") do (
  17.             endlocal
  18.             set _skip=%%~i
  19.         )
  20.     )
  21. ) >"%file%"
  22. del ..tmp
复制代码





欢迎光临 批处理之家 (http://bbs.bathome.net/) Powered by Discuz! 7.2