Board logo

标题: [文本处理] 批处理如何只取一个文本中想要的段? [打印本页]

作者: hijackle    时间: 2011-7-18 11:24     标题: 批处理如何只取一个文本中想要的段?

有以下一系列类似文本内容如下:
id=123214214
Name=aaaaaa

id=123214321
Name=gsdagdsg

id=12321421
Name=bbbbbbb

如何屏蔽name=aaaaaa和bbbbbb的这2个小段包括他之前的id=内容,只取除此之外的小段的id和name的值,注意name=aaaaaa和name=bbbbbb这样的小段不一定每个文本都有的,如果有的话name=aaaaaa和name=bbbbbbb是固定的
作者: mxxcgzxxx    时间: 2011-7-18 11:28

是取整段还是只要=号后的值?
作者: 601997526    时间: 2011-7-18 12:53

想到一个笨办法,但前提是格式都要跟LZ贴出来的是一样的
  1. @echo off&setlocal ENABLEDELAYEDEXPANSION
  2. for /f %%i in (a.txt) do (set %%i
  3. echo.%%i|findstr /i "^name=">nul&&if "!name!"=="aaaaaa" (echo.>nul) else (if not "!name!"=="bbbbbbb" echo id=!id!&echo name=!name!))
  4. pause
复制代码

作者: hijackle    时间: 2011-7-18 17:23

只要等号后面的值
作者: lvsehuaxue    时间: 2011-7-19 17:19

本帖最后由 lvsehuaxue 于 2011-7-19 17:21 编辑
  1. @echo off&setlocal enabledelayedexpansion
  2. for /f "delims=" %%i in (a.txt) do (
  3.     set /a n=n%%2+1
  4.     set a=!b!
  5.     set b=%%i  
  6.     if !n!==2 (
  7.       echo !b!|findstr "Name=aaaaaa Name=bbbbbbb">nul || (echo !a!&echo !b!)
  8.     )
  9. )
  10. pause
复制代码

作者: lvsehuaxue    时间: 2011-7-19 17:43

本帖最后由 lvsehuaxue 于 2011-7-19 18:43 编辑

3楼可简化
  1. @echo off&setlocal enabledelayedexpansion
  2. for /f "delims=" %%i in (a.txt) do set %%i&set /a n=n%%2+1&if !n!==2 echo %%i|findstr "aaaaaa bbbbbbb">nul||(echo id=!id!&echo Name=!Name!)   
  3. pause
复制代码

作者: ArdentMan    时间: 2011-7-19 19:24

  1. @Echo Off&SetLocal EnableDelayedExpansion
  2. For %%a In (*.txt) Do (
  3.   Set "Str="
  4.   (For /F "delims=" %%b In ('Type "%%a"^&Echo end') Do (
  5.     For %%c IN (aaaaaa bbbbb) Do If "%%b" EQU "Name=%%c" Set "Str="
  6.     If Defined Str Echo !Str!&Echo %%b
  7.     Set "Str=%%b"
  8.   )>tem
  9.   Move tem "%%a"
  10. )
复制代码

作者: CUer    时间: 2011-7-19 22:58

  1. gawk -v RS= "$0!~/Name=aaaaaa/&&$0!~/Name=bbbbbb/" a.txt
复制代码

作者: Hello123World    时间: 2011-7-22 12:43

本帖最后由 Hello123World 于 2011-7-22 12:49 编辑
  1. @echo off
  2. For /f "delims=" %%i in ('dir  /b *.txt') do  findstr /v "Name=bbbbbbb id=12321421 id=123214214 Name=aaaaaa" "%%i">>"%%~nih%%~xi"
  3. pause
复制代码





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