中国DOS联盟

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

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

中国DOS联盟论坛
现在时间是 2026-06-24 05:19
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » 怎么删除文本的最后一行 查看 3,680 回复 23
16 发表于 2007-08-08 17:29 ·  中国 湖南 娄底 电信
银牌会员
★★★
积分 2,268
发帖 879
注册 2006-12-19 16:23
19年会员
UID 73968
性别 男
状态 离线
8楼的方法确实好,如此简洁..
就是不太理解 findstr 命令的表达式
$ 不是代表行尾吗?那么 findstr $ 应该是匹配最后一行啊?怎么会是忽略最后一行呢?
不解,望高人指点.
17 发表于 2007-08-08 17:32 ·  中国 北京 联通
中级用户
★★
替身
积分 269
发帖 130
注册 2007-03-23 21:41
19年会员
UID 82683
性别 女
状态 离线
他的findstr $ a.txt的意思不就是查找有结束符的行吗?你最后一行只要不按回车不就排除了吗?哎
18 发表于 2007-08-09 10:14 ·  中国 广东 电信
荣誉版主
★★★★
batch fan
积分 5,226
发帖 1,737
注册 2006-03-10 00:38
20年会员
UID 51697
来自 成都
状态 离线
  17楼的解释并没有错,MS对findstr $ 的解释是匹配行尾,实际上,查找的是一行的回车换行符号,这也是使用 findstr ^.*$ 做整行匹配时必须注意的一个问题,稍微不细心就要出错。比如,findstr ^abc$ test.txt 的本意是要查找 abc 这个字符串行,如果 abc 这个字符串行正好位于最后一行的话,就无法匹配到,解决的办法是强制在 test.txt 的最后一行后添加新行,比如说一个空行。
尺有所短,寸有所长,学好CMD没商量。
考虑问题复杂化,解决问题简洁化。
19 发表于 2007-08-09 11:29 ·  中国 北京 联通
中级用户
★★
替身
积分 269
发帖 130
注册 2007-03-23 21:41
19年会员
UID 82683
性别 女
状态 离线
知道为什么他这么回答吗?因为我还是个新手,还是个初级用户,如果我是版主,他的回答就会变成“有些不理解,请版主明示”,哎,对于所谓的高级用户我的任何解释都是无效的,要不我说论坛变得越来越拉圾啦,论坛今后的发展令人担忧啊.........

对了,namejm最近学习WMIC怎么样?入门没有?

[ Last edited by ansipeter on 2007-8-9 at 11:32 AM ]
20 发表于 2007-08-09 12:18 ·  中国 广东 电信
荣誉版主
★★★★
batch fan
积分 5,226
发帖 1,737
注册 2006-03-10 00:38
20年会员
UID 51697
来自 成都
状态 离线
  其实,考虑问题需要多转几道弯,虽然别人没有把你想要的答案直接说出来,但是,别人说到了点子上,并没有展开来,这个时候,你就得再做一些推论。

  就你的疑问,解释如下:
  1、因为 findstr $ 的实质是查找行尾的回车换行符号,又因为除了最后一行之外的所有行的行尾都存在这个符号,所以,最后一行之外的所有行都能够查找到;
  2、因为最后一行虽然看起来是完整的一行,但是,它的尾部并没有回车换行符号,而 findstr $ 是以回车换行符号来识别某个字符串是不是一个"行",所以,最后一行不能被识别;
  3、综上所述,findstr $ 只能找到除了最后一行之外的其它行(除了以分号打头的行——注:这个是有条件限制的,如24楼所说的条件),最后一行因为行尾没有回车换行符号而被 findstr $ 忽略了,也就达到了删除最后一行的目的。

[ Last edited by namejm on 2007-8-9 at 02:52 PM ]
本帖最近评分记录 (共 1 条) 点击查看详情
评分人分数时间
1112yuhua +2 2007-08-13 00:22
尺有所短,寸有所长,学好CMD没商量。
考虑问题复杂化,解决问题简洁化。
21 发表于 2007-08-09 14:16 ·  中国 湖南 娄底 电信
银牌会员
★★★
积分 2,268
发帖 879
注册 2006-12-19 16:23
19年会员
UID 73968
性别 男
状态 离线
茅塞顿开!
findstr 的表达式是有很多不太好理解啊.
再请问一句, (除了以分号打头的行) 是什么意识?
我试了一下,分号打头的行也可以匹配啊?
谢了.

[ Last edited by 26933062 on 2007-8-11 at 07:32 AM ]
致精致简!
22 发表于 2007-08-09 14:50 ·  中国 广东 电信
荣誉版主
★★★★
batch fan
积分 5,226
发帖 1,737
注册 2006-03-10 00:38
20年会员
UID 51697
来自 成都
状态 离线
  呵呵,findstr $ 不能查找以分号打头的行,这个是有条件限制的,我忘记说了,是在这样的语句中是不能查找的:for /f "delims=" %%i in ('findstr $ test.txt') ……
尺有所短,寸有所长,学好CMD没商量。
考虑问题复杂化,解决问题简洁化。
23 发表于 2007-08-27 19:41 ·  中国 广东 深圳 诺瓦科技发展有限公司
初级用户
积分 32
发帖 21
注册 2007-08-22 13:29
18年会员
UID 95593
性别 男
状态 离线
哇,热处理这么复杂呀,让我越学越觉累
24 发表于 2008-01-22 23:09 ·  中国 上海 东方有线
初级用户
积分 34
发帖 12
注册 2006-06-04 18:42
20年会员
UID 56544
状态 离线
那么删除最后两行的语句应该怎么写呢?
findstr $ a.txt >>b.txt是很精简,但是不能删除空行。
论坛跳转: