标题: [文本处理] 批处理如何只取一个文本中想要的段? [打印本页]
作者: 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贴出来的是一样的- @echo off&setlocal ENABLEDELAYEDEXPANSION
- for /f %%i in (a.txt) do (set %%i
- echo.%%i|findstr /i "^name=">nul&&if "!name!"=="aaaaaa" (echo.>nul) else (if not "!name!"=="bbbbbbb" echo id=!id!&echo name=!name!))
- pause
复制代码
作者: hijackle 时间: 2011-7-18 17:23
只要等号后面的值
作者: lvsehuaxue 时间: 2011-7-19 17:19
本帖最后由 lvsehuaxue 于 2011-7-19 17:21 编辑
- @echo off&setlocal enabledelayedexpansion
- for /f "delims=" %%i in (a.txt) do (
- set /a n=n%%2+1
- set a=!b!
- set b=%%i
- if !n!==2 (
- echo !b!|findstr "Name=aaaaaa Name=bbbbbbb">nul || (echo !a!&echo !b!)
- )
- )
- pause
复制代码
作者: lvsehuaxue 时间: 2011-7-19 17:43
本帖最后由 lvsehuaxue 于 2011-7-19 18:43 编辑
3楼可简化- @echo off&setlocal enabledelayedexpansion
- 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!)
- pause
复制代码
作者: ArdentMan 时间: 2011-7-19 19:24
- @Echo Off&SetLocal EnableDelayedExpansion
- For %%a In (*.txt) Do (
- Set "Str="
- (For /F "delims=" %%b In ('Type "%%a"^&Echo end') Do (
- For %%c IN (aaaaaa bbbbb) Do If "%%b" EQU "Name=%%c" Set "Str="
- If Defined Str Echo !Str!&Echo %%b
- Set "Str=%%b"
- )>tem
- Move tem "%%a"
- )
复制代码
作者: CUer 时间: 2011-7-19 22:58
- gawk -v RS= "$0!~/Name=aaaaaa/&&$0!~/Name=bbbbbb/" a.txt
复制代码
作者: Hello123World 时间: 2011-7-22 12:43
本帖最后由 Hello123World 于 2011-7-22 12:49 编辑
- @echo off
- For /f "delims=" %%i in ('dir /b *.txt') do findstr /v "Name=bbbbbbb id=12321421 id=123214214 Name=aaaaaa" "%%i">>"%%~nih%%~xi"
- pause
复制代码
欢迎光临 批处理之家 (http://bbs.bathome.net/) |
Powered by Discuz! 7.2 |