找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 29763|回复: 9

[文本处理] [已解决]批处理如何提取指定文本区域内特定的行内容?

[复制链接]
发表于 2016-3-22 12:54:53 | 显示全部楼层 |阅读模式
如何使用BAT删除{}中指定行"李四 190cm 80kg 前锋"之外的内容,得到如下结果
发表于 2016-3-22 13:37:19 | 显示全部楼层
本帖最后由 happy886rr 于 2016-3-22 15:58 编辑

回复 1#enoone1
  1. @echo off&setlocal enabledelayedexpansion
  2. set "str=李四 190cm 80kg 前锋"
  3. for /f "tokens=1* delims=:" %%a in ('type test.txt^|findstr /n /i /c:"!str!"') do (set #%%a=1)
  4. for /f "tokens=1* delims=:" %%a in ('type test.txt^|findstr /n .*') do (
  5.         set "str=%%b"
  6.         if "!str: =!"=="{" (set N=%%a)
  7.         if defined #%%a (set L!N!=1)
  8. )
  9. for /f "tokens=1* delims=:" %%a in ('type test.txt^|findstr /n .*') do (
  10.         if not defined gk (
  11.                 echo,%%b
  12.         ) else (
  13.                 if defined #%%a (
  14.                         echo,%%b
  15.                 ) else (
  16.                         set "str=%%b"
  17.                         if "!str: =!"=="}" (
  18.                                 echo,}
  19.                                 set gk=<nul
  20.                         )
  21.                 )
  22.         )
  23.         if defined L%%a (set gk=1)
  24. )
  25. pause>nul
复制代码

评分

参与人数 1技术 +1 收起 理由
enoone1 + 1 666666

查看全部评分

 楼主| 发表于 2016-3-22 14:25:23 | 显示全部楼层
大侠们帮我看看 为什么这段代码
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. set keyword=李四 190cm 80kg 前锋
  4. set flag=0
  5. for /f "delims=" %%i in (test.txt) do (
  6.   if "%%i"=="{" echo {&set flag=1
  7.   if "%%i"=="}" set flag=0
  8.   if "!flag!"=="0" echo %%i
  9.   if "!flag!"=="1" echo %%i|findstr /c:"%keyword%"
  10. )
  11. pause
复制代码
flag一直0,进不到条件 为什么??
发表于 2016-3-22 14:26:30 | 显示全部楼层
  1. @echo off
  2. findstr /r /c:"^[^ }]" test.txt
  3. findstr /r /c:"^ *李四.*前锋$" /c:"^}" test.txt

  4. pause
复制代码

评分

参与人数 1技术 +1 收起 理由
enoone1 + 1 +10086 最佳回复

查看全部评分

发表于 2016-3-22 14:38:40 | 显示全部楼层
回复 3# enoone1
写法不规范
 楼主| 发表于 2016-3-22 14:39:23 | 显示全部楼层
回复 2# happy886rr


    type test.txt^|findstr /n .*好奇怪 后面那个}被过滤了,稍动下你的这段
  1. @echo off&setlocal enabledelayedexpansion
  2. set "str=李四"
  3. for /f "tokens=1* delims=:" %%a in ('type test.txt^|findstr /n /i /c:"!str!"') do (set #%%a=1)
  4. for /f "tokens=1* delims=:" %%a in ('findstr /n .* test.txt') do (
  5.         set "str=%%b"
  6.         if not defined gk (
  7.                 echo,%%b
  8.         ) else (
  9.                 if defined #%%a (echo,%%b)
  10.                 if "!str: =!"=="}" (
  11.                         echo,}
  12.                         set gk=<nul
  13.                 )
  14.         )
  15.         if "!str: =!"=="{" (set gk=1)
  16. )
  17. pause>nul
复制代码
 楼主| 发表于 2016-3-22 14:40:19 | 显示全部楼层
回复 5# happy886rr


    大神请直接点明下吧,谢谢。
发表于 2016-3-22 14:50:39 | 显示全部楼层
本帖最后由 happy886rr 于 2016-3-22 14:53 编辑

回复 7# enoone1
没问题呀。我测试了5000行,都完美过滤,兼容各种极端情况。
你不能就试一个条目。你条目多了,就知道了。因为你就一个条目。最后的}后边也没换行。
 楼主| 发表于 2016-3-22 15:01:45 | 显示全部楼层
回复 8# happy886rr


    是的 最后一行文本换行问题 顺便帮我瞅瞅3楼的疑问呗,谢谢。
发表于 2016-3-23 11:03:44 | 显示全部楼层
试试!
  1. @echo off&setlocal enabledelayedexpansion
  2. @echo off
  3. for /f  "delims=" %%a in ('type "test.txt" ^| findstr "李四"')  do (
  4. echo.篮球队招募:
  5. echo.现有球员介绍
  6. echo.{
  7. echo. %%a
  8. echo.}
  9. )
  10. pause >nul 2>nul
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-18 10:46 , Processed in 0.022013 second(s), 8 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表