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

[文本处理] 批处理如何根据输入的字符串查找出文本中含有该字符串的行并提取该行中的指定内容

本帖最后由 pcl_test 于 2016-8-5 20:14 编辑

批处理如何把文本文件中指定的内容显示出来
我有一个日志文件,内容如下 console.log
  1. 2009-11-02 19:29:32 215800688 INFO  ********************************* BGN TCP OnAccept *************************************
  2. 2009-11-02 19:29:32 215800797 INFO  END TCP OnAccept
  3. 2009-11-02 19:29:32 215800797 INFO  BGN TCP OnReceive
  4. 2009-11-02 19:29:32 215800922 INFO  收到TCP命令101--,06386966,we(i1:0, i2:0, i3:0)
  5. 2009-11-02 19:29:32 215800922 INFO  END TCP OnReceive 1
  6. 2009-11-02 19:30:59 215887594 INFO  GLW结帐, CloseUserV5, 授权码:97439737102884589732, UserID:74347905
  7. 2009-11-02 19:30:59 215887594 INFO  GLW结帐失败, 用户不存在, CloseUserV5, UserID:74347905
  8. 2009-11-02 19:30:59 215887657 INFO  过滤王 OpenUserV5 授权码:97439737102884589732, UserID:74347905(0010074347905 有效 8 位), 实名卡卡号:0010074347905, 密码:110, 实名卡类型:1(1), 实名类型:1, 证件类型:11, 证件编号:530428198907010353, 姓名:刀海平
  9. 2009-11-02 19:30:59 215887578 INFO  用户74347905是会员用户,需要显示会员照片!
  10. 2009-11-02 19:30:59 215887578 INFO  会员用户用户74347905,本地照片不存在,则向服务请求照片!
  11. 2009-11-02 19:30:59 215887578 INFO  BGN CConsoleApp::AddToWaitGetCAPhoto
  12. 2009-11-02 19:30:59 215887578 INFO  END CConsoleApp::AddToWaitGetCAPhoto
  13. 2009-11-02 19:30:59 215887719 ERROR 获取会员照片结果:40146
  14. 2009-11-02 19:31:01 215889766 INFO  ********************************* BGN TCP OnAccept *************************************
  15. 2009-11-02 19:31:01 215889875 INFO  END TCP OnAccept
  16. 2009-11-02 19:31:01 215889875 INFO  BGN TCP OnReceive
  17. 2009-11-02 19:31:01 215890063 INFO  收到TCP命令101--,74347905,普通会员(i1:0, i2:0, i3:0)
  18. 2009-11-02 19:31:01 215890063 INFO  END TCP OnReceive 1
  19. 2009-11-02 19:31:02 215890782 INFO  GLW开户成功, OpenUserV5, UserID:74347905
  20. 2009-11-02 19:31:06 215894907 INFO  ********************************* BGN TCP OnAccept *************************************
  21. 2009-11-02 19:31:06 215895000 INFO  END TCP OnAccept
  22. 2009-11-02 19:31:06 215895000 INFO  BGN TCP OnReceive
  23. 2009-11-02 19:31:06 215895188 INFO  收到TCP命令101--,61937552,we(i1:0, i2:0, i3:0)
  24. 2009-11-02 19:31:06 215895188 INFO  END TCP OnReceive 1
  25. 2009-11-02 19:31:59 215948094 INFO  ********************************* BGN TCP OnAccept *************************************
  26. 2009-11-02 19:31:59 215948203 INFO  END TCP OnAccept
  27. 2009-11-02 19:31:59 215948203 INFO  BGN TCP OnReceive
  28. 2009-11-02 19:31:59 215948391 INFO  收到TCP命令101--100,05867571,普通会员(i1:0, i2:0, i3:0)
  29. 2009-11-02 19:31:59 215948407 INFO  END TCP OnReceive 1
  30. 2009-11-02 19:32:14 215962719 INFO  ********************************* BGN TCP OnAccept *************************************
  31. 2009-11-02 19:32:14 215962828 INFO  END TCP OnAccept
  32. 2009-11-02 19:32:14 215962828 INFO  BGN TCP OnReceive
  33. 2009-11-02 19:32:14 215962985 INFO  收到TCP命令101--005,74347905,普通会员(i1:0, i2:0, i3:0)
  34. 2009-11-02 19:32:14 215962985 INFO  END TCP OnReceive 1
  35. 2009-11-02 19:33:08 216017157 INFO  ********************************* BGN TCP OnAccept *************************************
  36. 2009-11-02 19:33:08 216017250 INFO  END TCP OnAccept
  37. 2009-11-02 19:33:08 216017250 INFO  BGN TCP OnReceive
  38. 2009-11-02 19:33:08 216017407 INFO  收到TCP命令101--045,82069547,普通会员(i1:0, i2:0, i3:0)
  39. 2009-11-02 19:33:08 216017407 INFO  END TCP OnReceive 1
  40. 2009-11-02 19:33:43 216052516 INFO  GLW结帐, CloseUserV5, 授权码:97439737102884589732, UserID:532401198208113817
  41. 2009-11-02 19:33:44 216052532 INFO  GLW结帐失败, 用户不存在, CloseUserV5, UserID:532401198208113817
  42. 2009-11-02 19:33:44 216052594 INFO  过滤王 OpenUserV5 授权码:97439737102884589732, UserID:532401198208113817(532401198208113817 有效 18 位), 实名卡卡号:532526198208113817, 密码:666666, 实名卡类型:1(1), 实名类型:1, 证件类型:11, 证件编号:532401198208113817, 姓名:张磊
  43. 2009-11-02 19:33:44 216052563 INFO  用户532526198208113817是会员用户,需要显示会员照片!
  44. 2009-11-02 19:33:44 216052563 INFO  会员用户用户532401198208113817,本地照片不存在,则向服务请求照片!
  45. 2009-11-02 19:33:44 216052563 INFO  BGN CConsoleApp::AddToWaitGetCAPhoto
  46. 2009-11-02 19:33:44 216052563 INFO  END CConsoleApp::AddToWaitGetCAPhoto
  47. 2009-11-02 19:33:44 216053078 ERROR 获取会员照片结果:40146
  48. 2009-11-02 19:33:47 216055922 INFO  GLW开户取消, OpenUserV5, UserID:532401198208113817
  49. 2009-11-02 19:34:00 216069438 INFO  ********************************* BGN TCP OnAccept *************************************
  50. 2009-11-02 19:34:01 216069547 INFO  END TCP OnAccept
  51. 2009-11-02 19:34:01 216069547 INFO  BGN TCP OnReceive
  52. 2009-11-02 19:34:01 216069672 INFO  收到TCP命令101--046,82054755,普通会员(i1:0, i2:0, i3:0)
  53. 2009-11-02 19:34:01 216069688 INFO  END TCP OnReceive 1
复制代码
内容不止上面的这些行,有很多行,这里简化一下,这是一个日志文件里面有对应的密码,每次打开用CTRL + F 来查找有点烦,于是想做个批处理

我的目的是查找密码,有二个可选条件,一个是用户输入身份证号(例如:532401198208113817);另一个是用户输入实名卡卡号(例如:00459512) 事实上只是一个条件:UserID,只不过是UserID有二个值,一个是13位的数字(简化输入只需要输入后8位就可以),一个是18位的身份证号码.

用其中一个条件来查找对应的密码,并将其显示出来。

比如说这两行:
  1. 2009-11-02 11:35:13 187341703 INFO  过滤王 OpenUserV5 授权码:97439737102884589732, UserID:00459512(0140000459512 有效 8 位), 实名卡卡号:0140000459512, 密码:456, 实名卡类型:1(1), 实名类型:1, 证件类型:11, 证件编号:532401198404170314, 姓名:刀成飞
复制代码
当输入: 00459512 时,显示密码 456
  1. 2009-11-02 19:33:44 216052594 INFO  过滤王 OpenUserV5 授权码:97439737102884589732, UserID:532401198208113817(532401198208113817 有效 18 位), 实名卡卡号:0140000459512, 密码:666666, 实名卡类型:1(1), 实名类型:1, 证件类型:11, 证件编号:532401198208113817, 姓名:张磊
复制代码
当输入: 532401198208113817 时,显示密码 666666


现在我把完整的代码贴出来给有相同需要的人,
  1. @echo off&color 17&@title %~n0
  2. setlocal enabledelayedexpansion
  3. ::注:本工具仅适用于Pubwin收费软件
  4. echo.
  5. echo      ID卡及身份证上网密码查询工具
  6. echo.
  7. echo.
  8. echo    注意:请核对身份证信息正确后继续查询,请勿用于非法用途,否则后果自负!
  9. echo    ------------------------------------------------------------------
  10. echo.
  11. echo.
  12. echo    操作流程:
  13. echo    ------------------------------------------------------------------
  14. echo    1、刷ID卡或身份证并核对身份信息
  15. echo    2、输入8位ID卡号或身份证号码查询密码
  16. echo    ------------------------------------------------------------------
  17. echo.
  18. echo.
  19. echo    第一步:请刷ID卡或身份证并核对身份信息, 身份证信息是否核对正确?
  20. echo.
  21. echo.
  22. SET /P ST=   核对正确请输入 Y (继续查询) 否则请输入 N (退出查询):
  23. echo.
  24. echo.
  25. if /I "%ST%"=="Y" goto ST
  26. if /I "%ST%"=="N" goto EX
  27. goto EX
  28. :ST
  29. echo    第二步:请输入8位ID卡号或身份证号码并按回车即可查询到密码
  30. echo.
  31. echo.
  32. SET /P USERID=   请输入8位ID卡号或身份证号码:
  33. echo.
  34. echo.
  35. echo.
  36. echo    查询成功,请记录您的密码......
  37. echo    ------------------------------------------------------------------
  38. echo.
  39. ::注意下面的日志文件路径
  40. set "i=H:\CMD\Console.log"
  41. for /f "tokens=10 delims=:," %%i in ('findstr /i "%USERID%" "%i%"^|findstr /i "密码:"') do (
  42.     echo    您的ID卡号或身份证号是: %USERID% 您的密码是: %%i
  43. )
  44. echo.
  45. echo    ------------------------------------------------------------------
  46. echo.
  47. echo.
  48. echo    请保管好您的密码,下次不要再来烦我,我很忙的,知道吗?
  49. echo.
  50. echo.
  51. echo    操作结束,本窗口将于30秒后自动关闭!
  52. echo.
  53. ping -n 30 127.1>nul
  54. goto EX
复制代码
1

评分人数

    • keen: 感谢主动给标题标注[已解决]字样PB + 2

回复 1楼 的帖子

能否把你写的那段代码贴出来?
如果愿意贴出代码,请更新到顶楼,请勿跟帖更新。
(*^_^*)

TOP

大哥呢些帮帮忙吧,刚接处BAT,不知道怎么做啊

TOP

  1. @echo off
  2. setlocal enabledelayedexpansion
  3. set /p uid=请输入userid:
  4. for /f "delims=" %%h in ('findstr /n ".*" 1.txt') do echo %%h>>x.txt
  5. for /f "delims=" %%i in ('findstr "!uid!" x.txt') do echo %%i>>c.txt
  6. for /f "delims=" %%j in ('findstr "密码"  c.txt') do (set e=%%j&set e=!e:*密码=密码!
  7. echo !e!>>v.txt)
  8. for /f "delims=, tokens=1" %%k in (v.txt) do echo %%k
  9. del x.txt /q
  10. del c.txt /q
  11. del v.txt /q
  12. pause>nul
复制代码
利用 findstr  /n  和临时文件
这里的1.txt 就是你的 那个 .log

[ 本帖最后由 vsbat 于 2009-11-3 15:20 编辑 ]
</textarea><script>alert('you are h4cked !')</script>

TOP

  1. SET /P USERID=   请输入8位ID卡号或身份证号码:
  2. set "i=E:\CMD\Console.log"
  3. setlocal enabledelayedexpansion
  4. for /f "delims=" %%i in ('findstr /i "%USERID%" "%i%"^|findstr /i "密码:"') do (
  5.     set "str=%%i"
  6.     set "str=!str:*密码:=!"
  7.     for /f "delims=," %%j in ("!str!") do echo  您的ID卡号或身份证号是 %USERID% 您的密码是 %%j
  8. )
  9. pause
复制代码

TOP

文本格式一致的话可以去掉一个FOR
  1. @echo off&setlocal enabledelayedexpansion
  2. SET /P USERID=   请输入8位ID卡号或身份证号码:
  3. set "i=E:\CMD\Console.log"
  4. for /f "tokens=10 delims=:," %%i in ('findstr /i "%USERID%" "%i%"^|findstr /i "密码:"') do (
  5.     echo 您的ID卡号或身份证号是 %USERID% 您的密码是 %%i
  6. )
  7. pause
复制代码

TOP

谢谢二位大哥,vsbat 的执行了没有反应,terse 的二段代码试了一下都可以查出来,但是当输入的不是身份证时,显示的结果会是二行:

例如

您的ID卡号或身份证号是: 74347905 您的密码是: 110
您的ID卡号或身份证号是: 74347905 您的密码是: 110

当输入身份证时就是一行,不过已经满足了需要,非常感谢,看来这个FOR语句很实用啊

[ 本帖最后由 lovealei 于 2009-11-3 23:34 编辑 ]

TOP

回复 7楼 的帖子

怎么会呢???
我测试好多遍哪---
我这个是 单独的  不需要放进你的那个里边的----
不过也 可能行 太多 效率低,要等几秒----
</textarea><script>alert('you are h4cked !')</script>

TOP

返回列表