中国DOS联盟论坛

中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --
联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum
游客 | 登录 | 注册 | 会员 | 搜索 | 中国DOS联盟
中国DOS联盟论坛
现在时间是 2026-08-04 13:10
48,038 主题排行 / 350,123 发帖 / 今日 0 篇 / 48,251 会员排行
DOS批处理 & 脚本技术(批处理室) » [求助]如何从txt文件中提取含有指定字符串的整行?
可打印版本  1,213 / 11
第1楼 elsiezhou 发表于 2007-05-10 18:36
初级用户 发帖 13 积分 32
[求助]如何从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
输出含有以上字符串的行。

我已经看过了批处理室经典帖子分类索引中的贴子,试过几个,没成。在此请教帮忙。先谢谢了!
第2楼 flyinspace 发表于 2007-05-10 19:07
银牌会员 发帖 517 积分 1,206
举个例子,没有测试:)
for /f "tokens=* " %%i in (logo1.txt) do (
echo "%%i" | findstr /i "Fichier de controle"
echo "%%i" | findstr /i "Fichier de donnee"
……(这里省略你需要读出的行)
)

这样就可以了啊?
第3楼 elsiezhou 发表于 2007-05-10 19:56
初级用户 发帖 13 积分 32
for /f "tokens=* " %%i in (f:\logo1.txt) do (
echo "%%i" | findstr /i "Fichier de controle" >>f:\rlt.txt
)


试过了,不行。输出的txt文件是空的。我确定logo1中有这么一行。
第4楼 lililulula 发表于 2007-05-11 09:31
中级用户 发帖 138 积分 302

不知道楼主是不是要这样的效果
第5楼 elsiezhou 发表于 2007-05-11 15:33
初级用户 发帖 13 积分 32
我思考了一下,是需要加/c:,但改过之后,还是没有任何纪录。
第6楼 ttyp 发表于 2007-05-11 15:57
初级用户 发帖 84 积分 180
@echo off
for /f "tokens=* " %%i in (logo1.txt) do (
echo "%%i"|find "Fichier de controle">>r.txt
)
第7楼 ttyp 发表于 2007-05-11 16:01
初级用户 发帖 84 积分 180
或者

@echo off
for /f "tokens=* " %%i in (logo1.txt) do (
echo "%%i"|findstr /C:"Fichier de controle">>r.txt
)
第8楼 lililulula 发表于 2007-05-11 16:05
中级用户 发帖 138 积分 302
楼主需要处理的文本是不是有特别格式? 代码应该是没问题的
第9楼 elsiezhou 发表于 2007-05-11 17:04
初级用户 发帖 13 积分 32
处理的文本文件和输出的文件都是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

)
继续请教。谢谢!
第10楼 lxmxn 发表于 2007-05-11 17:18
版主 发帖 4,938 积分 11,386
将以下内容保存为View.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


然后在命令行执行:
第11楼 zhoushijay 发表于 2007-05-11 17:44
高级用户 发帖 375 积分 845
findstr /c:"Fichier de controle",log.txt
pause
真奇怪,上面个命令在CMD中输入可以运行,放在BAT中就没反映,不知道怎么回事
第12楼 lxmxn 发表于 2007-05-11 17:57
版主 发帖 4,938 积分 11,386
Originally posted by zhoushijay at 2007-5-11 17:44:
findstr /c:"Fichier de controle",log.txt
pause
真奇怪,上面个命令在CMD中输入可以运行,放在BAT中就没反映,不知道怎么回事

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

注意空色的",",去掉之后我这里是可以的。
[ 联系联盟系统管理团队 - 中国DOS联盟 - 标准版 ]
Sponsored by ifanr Inc | © 2001–2023