Board logo

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

作者: enoone1    时间: 2016-3-22 12:54     标题: [已解决]批处理如何提取指定文本区域内特定的行内容?

如何使用BAT删除{}中指定行"李四 190cm 80kg 前锋"之外的内容,得到如下结果
作者: happy886rr    时间: 2016-3-22 13:37

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

作者: enoone1    时间: 2016-3-22 14:25

大侠们帮我看看 为什么这段代码
  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,进不到条件 为什么??
作者: WHY    时间: 2016-3-22 14:26

  1. @echo off
  2. findstr /r /c:"^[^ }]" test.txt
  3. findstr /r /c:"^ *李四.*前锋$" /c:"^}" test.txt
  4. pause
复制代码

作者: happy886rr    时间: 2016-3-22 14:38

回复 3# enoone1
写法不规范
作者: enoone1    时间: 2016-3-22 14:39

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

作者: enoone1    时间: 2016-3-22 14:40

回复 5# happy886rr


    大神请直接点明下吧,谢谢。
作者: happy886rr    时间: 2016-3-22 14:50

本帖最后由 happy886rr 于 2016-3-22 14:53 编辑

回复 7# enoone1
没问题呀。我测试了5000行,都完美过滤,兼容各种极端情况。
你不能就试一个条目。你条目多了,就知道了。因为你就一个条目。最后的}后边也没换行。
作者: enoone1    时间: 2016-3-22 15:01

回复 8# happy886rr


    是的 最后一行文本换行问题 顺便帮我瞅瞅3楼的疑问呗,谢谢。
作者: luotexiaozh    时间: 2016-3-23 11:03

试试!
  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
复制代码





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