中国DOS联盟

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

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

中国DOS联盟论坛
现在时间是 2026-06-15 13:27
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » 新。怎么从一个文本中提取特定内容追加到另一个文件 查看 981 回复 12
楼 主 新。怎么从一个文本中提取特定内容追加到另一个文件 发表于 2008-12-09 23:10 ·  中国 重庆 电信
初级用户
★★
积分 92
发帖 82
注册 2007-11-13 23:35
UID 102602
性别 男
状态 离线
比如

boy于2008-12-09 星期二 0:18:29.28对girl说: 在哪里
boy于2008-12-09 星期二 0:32:19.29对lily说: 现在有空吗?
girl于2008-12-09 星期二 19:38:15.81对lily说:今天好郁闷
lily于2008-12-09 星期二 19:39:43.12对boy说: 现在在上班
girl于2008-12-09 星期二 19:40:32.41对boy说: 在家呢
boy于2008-12-09 星期二 19:40:50.16对girl说: 出来吧!
lily于2008-12-09 星期二 22:06:13.67对boy说: 有事吗?

只提取以下内容出来,并保存到另一个文本文件
boy于2008-12-09 星期二 0:18:29.28对girl说: 在哪里
boy于2008-12-09 星期二 0:32:19.29对lily说: 现在有空吗?
lily于2008-12-09 星期二 19:39:43.12对boy说: 现在在上班
girl于2008-12-09 星期二 19:40:32.41对boy说: 在家呢
boy于2008-12-09 星期二 19:40:50.16对girl说: 出来吧!
lily于2008-12-09 星期二 22:06:13.67对boy说: 有事吗?

就比如我是boy,只提取我和lily和girl的聊天记录,而不能提取lily和girl的聊天记录,文件内容格式是固定的

先谢谢各位大哥

[ Last edited by provem on 2008-12-10 at 18:27 ]
2 发表于 2008-12-09 23:19 ·  中国 重庆 九龙坡区 电信
版主
★★★★★
积分 9,023
发帖 5,017
注册 2007-05-31 19:39
UID 89899
性别 男
状态 离线
findstr "boy" a.txt>另一个文本文件.txt
3 发表于 2008-12-09 23:29 ·  中国 重庆 电信
初级用户
★★
积分 92
发帖 82
注册 2007-11-13 23:35
UID 102602
性别 男
状态 离线
谢谢Hat版主,注册了一年了,一直没时间来,以后会常来,哈哈

[ Last edited by provem on 2008-12-9 at 23:30 ]
4 发表于 2008-12-09 23:31 ·  中国 重庆 电信
初级用户
★★
积分 92
发帖 82
注册 2007-11-13 23:35
UID 102602
性别 男
状态 离线
Hat,如果lily和girl的聊天内容含有"boy"的话,那不是也被提取出来了吗?能不能根据聊天内容的格式做到准备的提取呢
5 发表于 2008-12-10 09:44 ·  中国 重庆 电信
初级用户
★★
积分 92
发帖 82
注册 2007-11-13 23:35
UID 102602
性别 男
状态 离线
如果我把上面找到的内容从文件里删除应该怎么做呢?就相当于删除聊天记录
6 Re 4楼 发表于 2008-12-10 10:14 ·  美国 惠普HP
版主
★★★★★
积分 9,023
发帖 5,017
注册 2007-05-31 19:39
UID 89899
性别 男
状态 离线
@echo off
type nul>另一个文本文件.txt
for /f "delims=" %%a in (a.txt) do (
set str=%%a
setlocal enabledelayedexpansion
echo !str:~0,36!|findstr "boy">nul
if !errorlevel! equ 0 (
>>另一个文本文件.txt echo.%%a
)
endlocal
)
本帖最近评分记录 (共 1 条) 点击查看详情
评分人分数时间
provem +1 2008-12-10 18:33
7 Re 5楼 发表于 2008-12-10 10:16 ·  美国 惠普HP
版主
★★★★★
积分 9,023
发帖 5,017
注册 2007-05-31 19:39
UID 89899
性别 男
状态 离线
@echo off
type nul>临时文本文件.txt
for /f "delims=" %%a in (a.txt) do (
set str=%%a
setlocal enabledelayedexpansion
echo !str:~0,36!|findstr "boy">nul
if !errorlevel! neq 0 (
>>临时文本文件.txt echo.%%a
)
endlocal
)
move /y 临时文本文件.txt a.txt
8 发表于 2008-12-10 10:54 ·  中国 重庆 电信
初级用户
★★
积分 92
发帖 82
注册 2007-11-13 23:35
UID 102602
性别 男
状态 离线
谢谢,因为在做局域网信使聊天程序,想保存聊天记录,现在已经没什么大问题了,还在学习中
9 发表于 2008-12-10 16:42 ·  中国 重庆 电信
初级用户
★★
积分 92
发帖 82
注册 2007-11-13 23:35
UID 102602
性别 男
状态 离线
版主,我发现当聊天记录文件数据多的时候,这个处理方式有点慢,还有没有处理速度快点的方法
10 发表于 2008-12-10 20:21 ·  中国 江西 赣州 电信
银牌会员
★★★★
积分 2,025
发帖 1,122
注册 2007-09-05 20:15
UID 96653
性别 男
状态 离线
提取:
@echo off
set 原文件=a.txt
set 提取后的文件=b.txt
for /f "delims=: tokens=1,*" %%a in ('^(findstr /n "^boy.*对lily说:" "%原文件%"^&findstr /n "^boy.*对girl说:" "%原文件%"^&findstr /n "^girl.*对boy说:" "%原文件%"^&findstr /n "^lily.*对boy说:" "%原文件%"^)^|sort') do >>"%提取后的文件%" echo.%%b


删除聊天记录:
@echo off
set 原文件=a.txt
set 删除后的文件=d.txt
findstr /v "^boy.*对lily说:" "%原文件%"|findstr /v "^boy.*对girl说:"|findstr /v "^girl.*对boy说:"|findstr /v "^lily.*对boy说:">"%删除后的文件%"


[ Last edited by tireless on 2008-12-10 at 21:52 ]
11 发表于 2008-12-11 00:08 ·  中国 重庆 电信
初级用户
★★
积分 92
发帖 82
注册 2007-11-13 23:35
UID 102602
性别 男
状态 离线
谢谢tireless,感觉测试的时候,会产生重复的聊天记录,比如我这次查看聊天记录会产生一次,明天再看聊天记录,又叠加产生昨天产生的那些聊天记录
12 发表于 2008-12-11 00:18 ·  中国 重庆 电信
初级用户
★★
积分 92
发帖 82
注册 2007-11-13 23:35
UID 102602
性别 男
状态 离线
我的想法是把一个局域网的所有聊天记录都保存在一台电脑上(当主机),每个人都可以查看自己发给别人的记录和别人发给自己的记(不能看不是自己发的,也不是发给自己的聊天记录),这里用的是Net send的方法接收信息,所以想到以这种方法保存聊天记录
以下我的正在调试的程序,大家看能不能完善下代码

:A_chat
set /p Main_Messege=请输入你将要发送的信息:
if "%Main_Messege%"=="2" goto ChatLog ::转到查看聊天记录
if "%Main_Messege%"=="" (
goto A_chat
) else (
echo %ME%于%date% %time%对%Local_IP_Name%说: %Main_Messege%>>\\server\news\chatlog\chatlog.txt
echo.正在发送信息,请稍等...
net send %sendname% %Main_Messege%
pause
goto A_chat
)

:ChatLog
cls
echo.-----------------------------------------------------
type nul>%tmp%"\"chatlog.txt
for /f "delims=" %%a in (\\server\news\chatlog\chatlog.txt) do (
set str=%%a
setlocal enabledelayedexpansion
echo !str:~0,40!|findstr "%ME%">nul
if !errorlevel! equ 0 (
>>%tmp%"\"chatlog.txt echo.%%a
)
endlocal
)
::findstr "%COMPUTERNAME%" \\server\news\chatlog\chatlog.txt>%tmp%"\"chatlog.txt
type %tmp%"\"chatlog.txt|more&echo.&echo.&echo.&pause
goto A_chat

以上代码输出的聊天格式为

boy于2008-12-09 星期二 0:18:29.28对girl说: 在哪里
boy于2008-12-09 星期二 0:32:19.29对lily说: 现在有空吗?
girl于2008-12-09 星期二 19:38:15.81对lily说:今天好郁闷
lily于2008-12-09 星期二 19:39:43.12对boy说: 现在在上班
girl于2008-12-09 星期二 19:40:32.41对boy说: 在家呢
boy于2008-12-09 星期二 19:40:50.16对girl说: 出来吧!
lily于2008-12-09 星期二 22:06:13.67对boy说: 有事吗?

以这种代码的处理方式感觉聊天记录多了,速度有点慢,大家帮我看看应该怎么改进

[ Last edited by provem on 2008-12-11 at 12:32 ]
13 Re 12楼 发表于 2008-12-11 11:17 ·  美国 惠普HP
版主
★★★★★
积分 9,023
发帖 5,017
注册 2007-05-31 19:39
UID 89899
性别 男
状态 离线
论坛跳转: