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

[文本处理] 批处理如何在杂乱无章的文件里面查找获得某些值?

比如下面这样的格式,我要找到Client="-A  -- -c 这行开头中 -h -H 后面的值,但有#Client="-A  -- -c 的行忽略不要。注意 1、client行前面可能有空格,也可能没有。2、H和h的顺序可能是颠倒的。
也就是得到两行值(对应-h -H)
20 30
30 20
期盼各位高手指点。
文本如下:
980 sfa97f  dsafdfa
kkkkkkkkkkkkkkk=00
[232]
    hahdfa sdfljad   13lj0 09u
[123]
    Client="-M  -- -c //1111 -h 20 -H 30 -k 5 djkjklsdfs iodf    slfd
    # Client="-M  -- -c //1311 -H 20 -h 30 -k 8 djkjklsdfs iodf    slfd 3ds
    # Client="-M  -- -c //1112 -h 20 -H 30 -k 1 djkjklsdfs iodf  
Client="-M  -- -c //1114 -H 20  -k 1  -h 30  djkjklsdfs iodf  
[5675]
   sdfa  1234325        00000 1112 908323     0908

[ 本帖最后由 tenderwine 于 2011-3-4 11:05 编辑 ]

  1. @echo off
  2. for /f "tokens=*" %%i in ('findstr /i /c:"Client=" a.txt') do (
  3.         set "str=%%i"&setlocal enabledelayedexpansion
  4.         set str=!str:"=!
  5.         if not "!str:~,1!"=="#" for %%a in (!str!) do (
  6.                 if defined flag1 set H=%%a
  7.                 if defined flag2 set/p=%%a <nul&set flag=1
  8.                 if defined flag if defined H echo !H!&set H=
  9.                 if "%%a"=="-H" (set flag1=1) else set flag1=
  10.                 if "%%a"=="-h" (set flag2=1) else set flag2=
  11.         )
  12.         endlocal
  13. )
复制代码
看得多说得多,远比不上写得多。

TOP

经测试OK,非常感谢。

我在你提供的基础上改了一下。

@echo off
for /f "tokens=*" %%i in ('findstr /i /C:"Client=" a.txt') do (
        set "str=%%i"&setlocal enabledelayedexpansion
        
        set str=!str:"=!
        
        if not "!str:~,1!"=="#" ( for %%a in (!str!) do (
                               
                if defined flag1 set H=%%a
                if defined flag2 set CH=%%a
               
                if "%%a"=="-H" (set flag1=1) else set flag1=
                if "%%a"=="-h" (set flag2=1) else set flag2=
        
                 
       )
                if defined H if defined CH (echo !H! !CH!) )
                set H=
                set CH=
                  
        endlocal
)

TOP

回复 3楼 的帖子

呵呵,鼓励楼主修改别人的代码。
看得多说得多,远比不上写得多。

TOP

返回列表