[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[文本处理] 批处理怎样删除文件内特定范围的行?

请教高手,批处理删除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文

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 来做开关
世界上没有学不会的知识,也没有想得到却做不到的事!

TOP

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里面的内容则是空的。
不知道有没有违背楼主的意思。
I Love Batch as love my life!

TOP

本帖最后由 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
复制代码

TOP

返回列表