中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --

联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum
DOS,代表着自由开放与发展,我们努力起来,学习FreeDOS和Linux的自由开放与GNU精神,共同创造和发展美好的自由与GNU GPL世界吧!

中国DOS联盟论坛
现在时间是 2026-08-11 10:26
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » [已结]如何从一文本中用两个关键字进行搜索 查看 783 回复 5
楼 主 [已结]如何从一文本中用两个关键字进行搜索 发表于 2009-02-13 10:31 ·  中国 重庆 电信
初级用户
★★
积分 92
发帖 82
注册 2007-11-13 23:35
18年会员
UID 102602
性别 男
状态 离线
文本内容(chatlog.db):

李五对王三说:我们明天大起大落地
李五对所有人说:大家好
王三对所有人说:那个谁来了
王三对李五说:昨天到哪去了


想得到地结果是:

李五对王三说:我们明天大起大落地
李五对所有人说:大家好
王三对所有人说:那个谁来了

下面是自己写的代码,不过当李五对所有人说,就会提取两次(重复了)
下面代码输出结果是

李五对王三说:我们明天大起大落地
李五对所有人说:大家好
李五对所有人说:大家好
王三对所有人说:那个谁来了

for /f "delims=" %%a in (chatlog.db) do (
set str=%%a
echo !str:~0,23!|findstr "%李五%">nul
if !errorlevel! equ 0 (
>>%tmp%\chatlog.tmp echo.%%a
)
echo !str:~0,23!|findstr "所有人">nul
if !errorlevel! equ 0 (
>>%tmp%\chatlog.tmp echo.%%a
)
)


代码应该怎么改

[ Last edited by provem on 2009-2-13 at 12:46 ]
2 发表于 2009-02-13 11:41 ·  中国 重庆 电信
版主
★★★★★
积分 9,023
发帖 5,017
注册 2007-05-31 19:39
19年会员
UID 89899
性别 男
状态 离线
一行里面使用两个管道,第一个管道把“所有人过滤掉”,第二个管道再搜索“李五”。
3 发表于 2009-02-13 12:11 ·  中国 重庆 电信
初级用户
★★
积分 92
发帖 82
注册 2007-11-13 23:35
18年会员
UID 102602
性别 男
状态 离线
版主说的是像这样吗?好像还是不对

for /f "delims=" %%a in (chatlog.db) do (
set str=%%a
echo !str:~0,23!|findstr "所有人" |findstr "%李五%">nul
if !errorlevel! equ 0 (
>>%tmp%\chatlog.tmp echo.%%a
)
)
4 发表于 2009-02-13 12:19 ·  中国 北京 鹏博士长城宽带
银牌会员
★★★★
[b]看你妹啊[/b]
积分 1,488
发帖 1,357
注册 2006-05-20 12:00
20年会员
UID 55770
状态 离线
看findtr 帮助

有问题请发论坛或者自行搜索,再短消息问我的统统是SB
5 发表于 2009-02-13 12:19 ·  中国 重庆 电信
初级用户
★★
积分 92
发帖 82
注册 2007-11-13 23:35
18年会员
UID 102602
性别 男
状态 离线

for /f "delims=" %%a in (chatlog.db) do (
set str=%%a
echo !str:~0,23!|findstr "所有人">nul|echo !str:~0,23!|findstr 李五">nul
if !errorlevel! equ 0 (
>>%tmp%\chatlog.tmp echo.%%a
)
)


现在只有 王三对所有人说:那个谁来了
没有提出来

[ Last edited by provem on 2009-2-13 at 12:22 ]
6 发表于 2009-02-13 12:45 ·  中国 重庆 电信
初级用户
★★
积分 92
发帖 82
注册 2007-11-13 23:35
18年会员
UID 102602
性别 男
状态 离线
问题解决了,以下代码可以达到我想要的效果,谢谢各位


for /f "delims=" %%a in (chatlog.db) do (
set str=%%a
echo !str:~0,23!|findstr /i "李五 所有人">nul
if !errorlevel! equ 0 (
>>%tmp%\chatlog.tmp echo.%%a
)
)
论坛跳转: