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

[文本处理] [已解决]批处理按条件删除文本

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

[ 本帖最后由 Wingl83 于 2009-7-19 13:38 编辑 ]
1

评分人数

    • keen: 感谢主动给标题标注[已解决]字样PB + 2
我是小菜菜……

  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. )
复制代码

TOP

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

似乎直接cd.>%f%就得了

TOP

没有处理空行:
  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 编辑 ]

TOP

返回列表