标题: [文本处理] 批处理如何根据输入的字符串查找出文本中含有该字符串的行并提取该行中的指定内容 [打印本页]
作者: lovealei 时间: 2009-11-3 12:01 标题: 批处理如何根据输入的字符串查找出文本中含有该字符串的行并提取该行中的指定内容
本帖最后由 pcl_test 于 2016-8-5 20:14 编辑
批处理如何把文本文件中指定的内容显示出来
我有一个日志文件,内容如下 console.log-
-
- 2009-11-02 19:29:32 215800688 INFO ********************************* BGN TCP OnAccept *************************************
- 2009-11-02 19:29:32 215800797 INFO END TCP OnAccept
- 2009-11-02 19:29:32 215800797 INFO BGN TCP OnReceive
- 2009-11-02 19:29:32 215800922 INFO 收到TCP命令101--,06386966,we(i1:0, i2:0, i3:0)
- 2009-11-02 19:29:32 215800922 INFO END TCP OnReceive 1
- 2009-11-02 19:30:59 215887594 INFO GLW结帐, CloseUserV5, 授权码:97439737102884589732, UserID:74347905
- 2009-11-02 19:30:59 215887594 INFO GLW结帐失败, 用户不存在, CloseUserV5, UserID:74347905
- 2009-11-02 19:30:59 215887657 INFO 过滤王 OpenUserV5 授权码:97439737102884589732, UserID:74347905(0010074347905 有效 8 位), 实名卡卡号:0010074347905, 密码:110, 实名卡类型:1(1), 实名类型:1, 证件类型:11, 证件编号:530428198907010353, 姓名:刀海平
- 2009-11-02 19:30:59 215887578 INFO 用户74347905是会员用户,需要显示会员照片!
- 2009-11-02 19:30:59 215887578 INFO 会员用户用户74347905,本地照片不存在,则向服务请求照片!
- 2009-11-02 19:30:59 215887578 INFO BGN CConsoleApp::AddToWaitGetCAPhoto
- 2009-11-02 19:30:59 215887578 INFO END CConsoleApp::AddToWaitGetCAPhoto
- 2009-11-02 19:30:59 215887719 ERROR 获取会员照片结果:40146
- 2009-11-02 19:31:01 215889766 INFO ********************************* BGN TCP OnAccept *************************************
- 2009-11-02 19:31:01 215889875 INFO END TCP OnAccept
- 2009-11-02 19:31:01 215889875 INFO BGN TCP OnReceive
- 2009-11-02 19:31:01 215890063 INFO 收到TCP命令101--,74347905,普通会员(i1:0, i2:0, i3:0)
- 2009-11-02 19:31:01 215890063 INFO END TCP OnReceive 1
- 2009-11-02 19:31:02 215890782 INFO GLW开户成功, OpenUserV5, UserID:74347905
- 2009-11-02 19:31:06 215894907 INFO ********************************* BGN TCP OnAccept *************************************
- 2009-11-02 19:31:06 215895000 INFO END TCP OnAccept
- 2009-11-02 19:31:06 215895000 INFO BGN TCP OnReceive
- 2009-11-02 19:31:06 215895188 INFO 收到TCP命令101--,61937552,we(i1:0, i2:0, i3:0)
- 2009-11-02 19:31:06 215895188 INFO END TCP OnReceive 1
- 2009-11-02 19:31:59 215948094 INFO ********************************* BGN TCP OnAccept *************************************
- 2009-11-02 19:31:59 215948203 INFO END TCP OnAccept
- 2009-11-02 19:31:59 215948203 INFO BGN TCP OnReceive
- 2009-11-02 19:31:59 215948391 INFO 收到TCP命令101--100,05867571,普通会员(i1:0, i2:0, i3:0)
- 2009-11-02 19:31:59 215948407 INFO END TCP OnReceive 1
- 2009-11-02 19:32:14 215962719 INFO ********************************* BGN TCP OnAccept *************************************
- 2009-11-02 19:32:14 215962828 INFO END TCP OnAccept
- 2009-11-02 19:32:14 215962828 INFO BGN TCP OnReceive
- 2009-11-02 19:32:14 215962985 INFO 收到TCP命令101--005,74347905,普通会员(i1:0, i2:0, i3:0)
- 2009-11-02 19:32:14 215962985 INFO END TCP OnReceive 1
- 2009-11-02 19:33:08 216017157 INFO ********************************* BGN TCP OnAccept *************************************
- 2009-11-02 19:33:08 216017250 INFO END TCP OnAccept
- 2009-11-02 19:33:08 216017250 INFO BGN TCP OnReceive
- 2009-11-02 19:33:08 216017407 INFO 收到TCP命令101--045,82069547,普通会员(i1:0, i2:0, i3:0)
- 2009-11-02 19:33:08 216017407 INFO END TCP OnReceive 1
- 2009-11-02 19:33:43 216052516 INFO GLW结帐, CloseUserV5, 授权码:97439737102884589732, UserID:532401198208113817
- 2009-11-02 19:33:44 216052532 INFO GLW结帐失败, 用户不存在, CloseUserV5, UserID:532401198208113817
- 2009-11-02 19:33:44 216052594 INFO 过滤王 OpenUserV5 授权码:97439737102884589732, UserID:532401198208113817(532401198208113817 有效 18 位), 实名卡卡号:532526198208113817, 密码:666666, 实名卡类型:1(1), 实名类型:1, 证件类型:11, 证件编号:532401198208113817, 姓名:张磊
- 2009-11-02 19:33:44 216052563 INFO 用户532526198208113817是会员用户,需要显示会员照片!
- 2009-11-02 19:33:44 216052563 INFO 会员用户用户532401198208113817,本地照片不存在,则向服务请求照片!
- 2009-11-02 19:33:44 216052563 INFO BGN CConsoleApp::AddToWaitGetCAPhoto
- 2009-11-02 19:33:44 216052563 INFO END CConsoleApp::AddToWaitGetCAPhoto
- 2009-11-02 19:33:44 216053078 ERROR 获取会员照片结果:40146
- 2009-11-02 19:33:47 216055922 INFO GLW开户取消, OpenUserV5, UserID:532401198208113817
- 2009-11-02 19:34:00 216069438 INFO ********************************* BGN TCP OnAccept *************************************
- 2009-11-02 19:34:01 216069547 INFO END TCP OnAccept
- 2009-11-02 19:34:01 216069547 INFO BGN TCP OnReceive
- 2009-11-02 19:34:01 216069672 INFO 收到TCP命令101--046,82054755,普通会员(i1:0, i2:0, i3:0)
- 2009-11-02 19:34:01 216069688 INFO END TCP OnReceive 1
复制代码
内容不止上面的这些行,有很多行,这里简化一下,这是一个日志文件里面有对应的密码,每次打开用CTRL + F 来查找有点烦,于是想做个批处理
我的目的是查找密码,有二个可选条件,一个是用户输入身份证号(例如:532401198208113817);另一个是用户输入实名卡卡号(例如:00459512) 事实上只是一个条件:UserID,只不过是UserID有二个值,一个是13位的数字(简化输入只需要输入后8位就可以),一个是18位的身份证号码.
用其中一个条件来查找对应的密码,并将其显示出来。
比如说这两行:- 2009-11-02 11:35:13 187341703 INFO 过滤王 OpenUserV5 授权码:97439737102884589732, UserID:00459512(0140000459512 有效 8 位), 实名卡卡号:0140000459512, 密码:456, 实名卡类型:1(1), 实名类型:1, 证件类型:11, 证件编号:532401198404170314, 姓名:刀成飞
复制代码
当输入: 00459512 时,显示密码 456- 2009-11-02 19:33:44 216052594 INFO 过滤王 OpenUserV5 授权码:97439737102884589732, UserID:532401198208113817(532401198208113817 有效 18 位), 实名卡卡号:0140000459512, 密码:666666, 实名卡类型:1(1), 实名类型:1, 证件类型:11, 证件编号:532401198208113817, 姓名:张磊
复制代码
当输入: 532401198208113817 时,显示密码 666666
现在我把完整的代码贴出来给有相同需要的人,- @echo off&color 17&@title %~n0
- setlocal enabledelayedexpansion
- ::注:本工具仅适用于Pubwin收费软件
- echo.
- echo ID卡及身份证上网密码查询工具
- echo.
- echo.
- echo 注意:请核对身份证信息正确后继续查询,请勿用于非法用途,否则后果自负!
- echo ------------------------------------------------------------------
- echo.
- echo.
- echo 操作流程:
- echo ------------------------------------------------------------------
- echo 1、刷ID卡或身份证并核对身份信息
- echo 2、输入8位ID卡号或身份证号码查询密码
- echo ------------------------------------------------------------------
- echo.
- echo.
- echo 第一步:请刷ID卡或身份证并核对身份信息, 身份证信息是否核对正确?
- echo.
- echo.
- SET /P ST= 核对正确请输入 Y (继续查询) 否则请输入 N (退出查询):
- echo.
- echo.
- if /I "%ST%"=="Y" goto ST
- if /I "%ST%"=="N" goto EX
- goto EX
- :ST
- echo 第二步:请输入8位ID卡号或身份证号码并按回车即可查询到密码
- echo.
- echo.
- SET /P USERID= 请输入8位ID卡号或身份证号码:
- echo.
- echo.
- echo.
- echo 查询成功,请记录您的密码......
- echo ------------------------------------------------------------------
- echo.
- ::注意下面的日志文件路径
- set "i=H:\CMD\Console.log"
- for /f "tokens=10 delims=:," %%i in ('findstr /i "%USERID%" "%i%"^|findstr /i "密码:"') do (
- echo 您的ID卡号或身份证号是: %USERID% 您的密码是: %%i
- )
- echo.
- echo ------------------------------------------------------------------
- echo.
- echo.
- echo 请保管好您的密码,下次不要再来烦我,我很忙的,知道吗?
- echo.
- echo.
- echo 操作结束,本窗口将于30秒后自动关闭!
- echo.
- ping -n 30 127.1>nul
- goto EX
复制代码
作者: keen 时间: 2009-11-3 12:54 标题: 回复 1楼 的帖子
能否把你写的那段代码贴出来?
如果愿意贴出代码,请更新到顶楼,请勿跟帖更新。
作者: lovealei 时间: 2009-11-3 14:29
大哥呢些帮帮忙吧,刚接处BAT,不知道怎么做啊
作者: vsbat 时间: 2009-11-3 15:16
- @echo off
- setlocal enabledelayedexpansion
- set /p uid=请输入userid:
- for /f "delims=" %%h in ('findstr /n ".*" 1.txt') do echo %%h>>x.txt
- for /f "delims=" %%i in ('findstr "!uid!" x.txt') do echo %%i>>c.txt
- for /f "delims=" %%j in ('findstr "密码" c.txt') do (set e=%%j&set e=!e:*密码=密码!
- echo !e!>>v.txt)
- for /f "delims=, tokens=1" %%k in (v.txt) do echo %%k
- del x.txt /q
- del c.txt /q
- del v.txt /q
- pause>nul
复制代码
利用 findstr /n 和临时文件
这里的1.txt 就是你的 那个 .log
[ 本帖最后由 vsbat 于 2009-11-3 15:20 编辑 ]
作者: terse 时间: 2009-11-3 15:24
- SET /P USERID= 请输入8位ID卡号或身份证号码:
- set "i=E:\CMD\Console.log"
- setlocal enabledelayedexpansion
- for /f "delims=" %%i in ('findstr /i "%USERID%" "%i%"^|findstr /i "密码:"') do (
- set "str=%%i"
- set "str=!str:*密码:=!"
- for /f "delims=," %%j in ("!str!") do echo 您的ID卡号或身份证号是 %USERID% 您的密码是 %%j
- )
- pause
复制代码
作者: terse 时间: 2009-11-3 15:32
文本格式一致的话可以去掉一个FOR- @echo off&setlocal enabledelayedexpansion
- SET /P USERID= 请输入8位ID卡号或身份证号码:
- set "i=E:\CMD\Console.log"
- for /f "tokens=10 delims=:," %%i in ('findstr /i "%USERID%" "%i%"^|findstr /i "密码:"') do (
- echo 您的ID卡号或身份证号是 %USERID% 您的密码是 %%i
- )
- pause
复制代码
作者: lovealei 时间: 2009-11-3 23:31
谢谢二位大哥,vsbat 的执行了没有反应,terse 的二段代码试了一下都可以查出来,但是当输入的不是身份证时,显示的结果会是二行:
例如
您的ID卡号或身份证号是: 74347905 您的密码是: 110
您的ID卡号或身份证号是: 74347905 您的密码是: 110
当输入身份证时就是一行,不过已经满足了需要,非常感谢,看来这个FOR语句很实用啊
[ 本帖最后由 lovealei 于 2009-11-3 23:34 编辑 ]
作者: vsbat 时间: 2009-11-4 13:12 标题: 回复 7楼 的帖子
怎么会呢???
我测试好多遍哪---
我这个是 单独的 不需要放进你的那个里边的----
不过也 可能行 太多 效率低,要等几秒----
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |