中国DOS联盟

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

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

中国DOS联盟论坛
现在时间是 2026-08-04 14:20
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » [求助]如何从txt文件中提取含有指定字符串的整行? 查看 1,216 回复 11
楼 主 [求助]如何从txt文件中提取含有指定字符串的整行? 发表于 2007-05-10 18:36 ·  法国
初级用户
积分 32
发帖 13
注册 2007-05-07 18:02
19年会员
UID 87768
性别 男
状态 离线
我有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 举个例子,没有测试:) 发表于 2007-05-10 19:07 ·  中国 广东 广州 天河区 电信
银牌会员
★★★
积分 1,206
发帖 517
注册 2007-03-25 01:18
19年会员
UID 82819
性别 男
状态 离线
for /f "tokens=* " %%i in (logo1.txt) do (
echo "%%i" | findstr /i "Fichier de controle"
echo "%%i" | findstr /i "Fichier de donnee"
……(这里省略你需要读出的行)
)

这样就可以了啊?
知,不觉多。不知,乃求知
3 发表于 2007-05-10 19:56 ·  法国
初级用户
积分 32
发帖 13
注册 2007-05-07 18:02
19年会员
UID 87768
性别 男
状态 离线
for /f "tokens=* " %%i in (f:\logo1.txt) do (
echo "%%i" | findstr /i "Fichier de controle" >>f:\rlt.txt
)


试过了,不行。输出的txt文件是空的。我确定logo1中有这么一行。
4 发表于 2007-05-11 09:31 ·  中国 上海 浦东新区 电信
中级用户
★★
积分 302
发帖 138
注册 2007-03-29 02:33
19年会员
UID 83224
性别 男
状态 离线
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

不知道楼主是不是要这样的效果
5 发表于 2007-05-11 15:33 ·  法国
初级用户
积分 32
发帖 13
注册 2007-05-07 18:02
19年会员
UID 87768
性别 男
状态 离线
我思考了一下,是需要加/c:,但改过之后,还是没有任何纪录。
6 发表于 2007-05-11 15:57 ·  中国 上海 电信
初级用户
★★
积分 180
发帖 84
注册 2006-09-07 00:33
19年会员
UID 61995
状态 离线
@echo off
for /f "tokens=* " %%i in (logo1.txt) do (
echo "%%i"|find "Fichier de controle">>r.txt
)
7 发表于 2007-05-11 16:01 ·  中国 上海 电信
初级用户
★★
积分 180
发帖 84
注册 2006-09-07 00:33
19年会员
UID 61995
状态 离线
或者

@echo off
for /f "tokens=* " %%i in (logo1.txt) do (
echo "%%i"|findstr /C:"Fichier de controle">>r.txt
)
8 发表于 2007-05-11 16:05 ·  中国 上海 浦东新区 电信
中级用户
★★
积分 302
发帖 138
注册 2007-03-29 02:33
19年会员
UID 83224
性别 男
状态 离线
楼主需要处理的文本是不是有特别格式? 代码应该是没问题的
9 发表于 2007-05-11 17:04 ·  法国
初级用户
积分 32
发帖 13
注册 2007-05-07 18:02
19年会员
UID 87768
性别 男
状态 离线
处理的文本文件和输出的文件都是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 发表于 2007-05-11 17:18 ·  中国 湖北 武汉 电信
版主
★★★★★
积分 11,386
发帖 4,938
注册 2006-07-23 17:10
20年会员
UID 59080
状态 离线
将以下内容保存为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


然后在命令行执行:
findstr /g:view.txt log1.txt>new.txt
11 发表于 2007-05-11 17:44 ·  中国 新疆 乌鲁木齐 电信
高级用户
★★★
Autowalk
积分 845
发帖 375
注册 2007-03-03 01:58
19年会员
UID 80606
性别 男
状态 离线
findstr /c:"Fichier de controle",log.txt
pause
真奇怪,上面个命令在CMD中输入可以运行,放在BAT中就没反映,不知道怎么回事
12 发表于 2007-05-11 17:57 ·  中国 湖北 武汉 电信
版主
★★★★★
积分 11,386
发帖 4,938
注册 2006-07-23 17:10
20年会员
UID 59080
状态 离线
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

注意空色的",",去掉之后我这里是可以的。
论坛跳转: