标题: [文本处理] 批处理怎样删除文件内特定范围的行? [打印本页]
作者: 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 +函数开关 应该很好解决- @echo off
- setlocal enabledelayedexpansion
- set "a1=<def_ip>"
- set "a2=<mac2ip>"
- set a=0
- cd.>b.txt
- for /f "tokens=*" %%1 in (a.txt) do (
- if "!a1!"=="%%1" set a=1
- if "!a2!"=="%%1" set a=0
- if !a!==0 echo.%%1 >>b.tat
- )
复制代码
也可以用 find 来做开关
作者: zfkzp 时间: 2011-6-24 09:17
2# mxxcgzxxx
这个的效果不是太好,我试了一下,“b.tat”里面的内容如下- <ddns>
- domain=keshu passwd=hxl desc= user=kes1 isp=33rg line=wan2
- <mac2ip>
- 192.168.20.11 90-e6-09 2011文
- <ddns>
- domain=keshu passwd=hxl desc= user=kes1 isp=33rg line=wan2
- <mac2ip>
- 192.168.20.11 90-e6-09 2011文
复制代码
b.txt里面的内容则是空的。
不知道有没有违背楼主的意思。
作者: tmplinshi 时间: 2011-6-24 12:34
本帖最后由 tmplinshi 于 2011-6-24 12:35 编辑
- @echo off
- setlocal disabledelayedexpansion
-
- set "file=a.txt"
- set "begin=<def_ip>"
- set "end=<mac2ip>"
- set "_skip="
-
- findstr /n .* "%file%" >..tmp
-
- (
- for /f "delims=" %%i in (..tmp) do (
- set str=%%i
- setlocal enabledelayedexpansion
- set str=!str:*:=!
- if /i "!str!" == "!begin!" set _skip=#
- if /i "!str!" == "!end!" set _skip=
- if not defined _skip echo,!str!
- for %%i in ("!_skip!") do (
- endlocal
- set _skip=%%~i
- )
- )
- ) >"%file%"
-
- del ..tmp
复制代码
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |