Board logo

标题: [文本处理] [已解决]批处理按条件删除文本 [打印本页]

作者: Wingl83    时间: 2009-7-19 11:23     标题: [已解决]批处理按条件删除文本

文本的行数不一,一般保留前三行,但若第四行不以“[”开头,则保留前六行。(即若第四行以“[”开头就只保留前三行;若第四行以其他字符开头,则保留前六行)其他的删除,并覆盖原文件。

[ 本帖最后由 Wingl83 于 2009-7-19 13:38 编辑 ]
作者: rat    时间: 2009-7-19 11:58

  1. @echo off & setlocal enabledelayedexpansion
  2. set f=a.txt
  3. for /f "eol= tokens=1,2* delims=:" %%a in ('findstr /n .* %f%') do (
  4. if %%a==1 (echo.%%b>%f%) else (
  5. if %%a lss 4 (echo.%%b>>%f%) else (
  6. if %%a==4 (
  7. set s=%%b
  8. set s=!s:~,1!
  9. if !s!==[ (goto :eof) else echo.%%b>>%f%
  10. ) else (
  11. if %%a gtr 6 (goto :eof) else echo.%%b>>%f%
  12. )
  13. )
  14. )
  15. )
复制代码

作者: yslyxqysl    时间: 2009-7-19 12:02

        if %%a==1 (echo.%%b>%f%) else (
                if %%a lss 4 (echo.%%b>>%f%) else (

似乎直接cd.>%f%就得了
作者: tireless    时间: 2009-7-19 13:28

没有处理空行:
  1. @echo off
  2. set file="a.txt"
  3. set /a n=0,m=0
  4. for /f "usebackq eol= delims=" %%a in (%file%) do (
  5.   set /a n+=1,"1/(4-n)" 2>nul || (
  6.     set /a n=1,m+=1,"1/(2-m)" 2>nul || exit /b
  7.     for /f "delims=[ tokens=*" %%i in ("%%a") do if "%%i" neq "%%a" exit /b
  8.   )
  9.   if defined file set file=>%file%
  10.   echo;%%a>>%file%
  11. )
复制代码

[ 本帖最后由 tireless 于 2009-7-19 13:31 编辑 ]




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