中国DOS联盟论坛

中国DOS联盟

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

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

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » [求助]如何从txt文件中提取含有指定字符串的整行?
作者:
标题: [求助]如何从txt文件中提取含有指定字符串的整行? 上一主题 | 下一主题
elsiezhou
初级用户





积分 32
发帖 13
注册 2007-5-7
状态 离线
『楼 主』:  [求助]如何从txt文件中提取含有指定字符串的整行?

我有log1.txt文件格式如下:
......


Fichier de controle :   Z:\Controle\POTANN.ctl
Fichier de donnee :      Z:\Data\POTANN.dat

......


Talbe POTANN :
  Chargement réussi de 206108 Lignes.

......

Nombre total d'enregistrements logiques ignores :          0
Nombre total d'enregistrements logiques lus :        206108
Nombre total d'enregistrements logiques rejetes :         0

......

Le debut de l'exécution effectue sur Jeu. Avr.  26 11:38:25 2007
La fin de l'exécution effectuée sur Jeu. Avr.  26 11:38:34 2007

......


PS:......指代若干行其他信息。

我需要编批处理执行后输出一个txt文件格式如下:

Fichier de controle :   Z:\Controle\POTANN.ctl
Fichier de donnee :      Z:\Data\POTANN.dat
Talbe POTANN :
Chargement reussi de 206108 Lignes.
Nombre total d'enregistrements logiques ignores :          0
Nombre total d'enregistrements logiques lus :        206108
Nombre total d'enregistrements logiques rejetes :         0
Le debut de l'exécution effectue sur Jeu. Avr.  26 11:38:25 2007
La fin de l'exécution effectuée sur Jeu. Avr.  26 11:38:34 2007

由于txt很大,我需要的这些行位置不固定,我想通过查找字符串
Fichier de controle
Fichier de donnee
Talbe
Chargement reussi
Nombre total d'enregistrements logiques ignores
Nombre total d'enregistrements logiques lus
Nombre total d'enregistrements logiques rejetes
Le debut de l'execution
La fin de l'execution
输出含有以上字符串的行。

我已经看过了批处理室经典帖子分类索引中的贴子,试过几个,没成。在此请教帮忙。先谢谢了!

2007-5-10 18:36
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
flyinspace
银牌会员





积分 1206
发帖 517
注册 2007-3-25
状态 离线
『第 2 楼』:  举个例子,没有测试:)

for /f "tokens=* " %%i in (logo1.txt) do (
         echo "%%i" | findstr /i "Fichier de controle"
         echo "%%i" | findstr /i "Fichier de donnee"
         ……(这里省略你需要读出的行)
         )

这样就可以了啊?



知,不觉多。不知,乃求知
2007-5-10 19:07
查看资料  发短消息 网志   编辑帖子  回复  引用回复
elsiezhou
初级用户





积分 32
发帖 13
注册 2007-5-7
状态 离线
『第 3 楼』:  

for /f "tokens=* " %%i in (f:\logo1.txt) do (
         echo "%%i" | findstr /i "Fichier de controle" >>f:\rlt.txt
         )


试过了,不行。输出的txt文件是空的。我确定logo1中有这么一行。

2007-5-10 19:56
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
lililulula
中级用户





积分 302
发帖 138
注册 2007-3-29
状态 离线
『第 4 楼』:  


findstr /c:"Fichier de controle :" log1.txt>log2.txt
findstr /c:"Fichier de donnee :" log1.txt>>log2.txt
..........
.........
findstr /c:"La fin de l'exécution effectuée" log1.txt>>log2.txt
不知道楼主是不是要这样的效果

2007-5-11 09:31
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
elsiezhou
初级用户





积分 32
发帖 13
注册 2007-5-7
状态 离线
『第 5 楼』:  

我思考了一下,是需要加/c:,但改过之后,还是没有任何纪录。

2007-5-11 15:33
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
ttyp
初级用户





积分 180
发帖 84
注册 2006-9-7
状态 离线
『第 6 楼』:  

@echo off
for /f "tokens=* " %%i in (logo1.txt) do (
         echo "%%i"|find "Fichier de controle">>r.txt
)

2007-5-11 15:57
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
ttyp
初级用户





积分 180
发帖 84
注册 2006-9-7
状态 离线
『第 7 楼』:  

或者

@echo off
for /f "tokens=* " %%i in (logo1.txt) do (
         echo "%%i"|findstr /C:"Fichier de controle">>r.txt
)

2007-5-11 16:01
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
lililulula
中级用户





积分 302
发帖 138
注册 2007-3-29
状态 离线
『第 8 楼』:  

楼主需要处理的文本是不是有特别格式? 代码应该是没问题的

2007-5-11 16:05
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
elsiezhou
初级用户





积分 32
发帖 13
注册 2007-5-7
状态 离线
『第 9 楼』:  

处理的文本文件和输出的文件都是txt文件。

问个很低级的问题:
为何要加@echo off
for /f "tokens=* " %%i in (logo1.txt)等命令?
我只要打findstr /C:"Fichier de controle" logo1.txt>>r.txt
            findstr /C:"Fichier de donnee" logo1.txt>>r.txt
            .......所有我要找得字符串
不就行了?

当我直接用findstr /C:"Fichier de controle" logo1.txt>>r.txt
            findstr /C:"Fichier de donnee" logo1.txt>>r.txt......
能出结果,但一加for就不行。

用for /f "tokens=* ".........是不是方便我处理一系列同类型的文件?

如@echo off
for /f "tokens=* " %%i in (logo1.txt logo2.txt logo3.txt) do (
         echo "%%i"|findstr /C:"Fichier de controle">>r.txt
         echo "%%i"|findstr /C:"Fichier de donnees">>r.txt
         echo "%%i"|findstr /C:"Talbe">>r.txt
         echo "%%i"|findstr /C:"Chargement reussi">>r.txt
         echo "%%i"|findstr /C:"Nombre total d'enregistrements logiques ignores">>r.txt
         echo "%%i"|findstr /C:"Nombre total d'enregistrements logiques lus">>r.txt
         echo "%%i"|findstr /C:"Nombre total d'enregistrements logiques rejetes">>r.txt
         echo "%%i"|findstr /C:"Le debut de l'execution">>r.txt
         echo "%%i"|findstr /C:"La fin de l'execution">>r.txt

)
继续请教。谢谢!

2007-5-11 17:04
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
lxmxn
版主




积分 11386
发帖 4938
注册 2006-7-23
状态 离线
『第 10 楼』:  

将以下内容保存为View.txt:

  Quote:
Fichier de controle
Fichier de donnee
Talbe
Chargement reussi
Nombre total d'enregistrements logiques ignores
Nombre total d'enregistrements logiques lus
Nombre total d'enregistrements logiques rejetes
Le debut de l'execution
La fin de l'execution

然后在命令行执行:
findstr /g:view.txt log1.txt>new.txt


2007-5-11 17:18
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
zhoushijay
高级用户

Autowalk


积分 845
发帖 375
注册 2007-3-3
状态 离线
『第 11 楼』:  

findstr /c:"Fichier de controle",log.txt
pause
真奇怪,上面个命令在CMD中输入可以运行,放在BAT中就没反映,不知道怎么回事

2007-5-11 17:44
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
lxmxn
版主




积分 11386
发帖 4938
注册 2006-7-23
状态 离线
『第 12 楼』:  



  Quote:
Originally posted by zhoushijay at 2007-5-11 17:44:
findstr /c:"Fichier de controle",log.txt
pause
真奇怪,上面个命令在CMD中输入可以运行,放在BAT中就没反映,不知道怎么回事



  Quote:
findstr /c:"Fichier de controle",log.txt

注意空色的",",去掉之后我这里是可以的。

2007-5-11 17:57
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复

请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


可打印版本 | 推荐给朋友 | 订阅主题 | 收藏主题



论坛跳转: