中国DOS联盟

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

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

中国DOS联盟论坛
现在时间是 2026-06-14 18:59
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » 如何显示文件的最后一行?
楼 主 如何显示文件的最后一行? 发表于 2006-05-24 15:22 ·  中国 北京 联通
初级用户
积分 124
发帖 34
注册 2006-05-23 11:38
UID 55845
状态 离线
如何写batch文件或者使用dos命令显示 文件的最后一行?
如:
showLastLine.bat samle.txt

"this is the last line of sample file."
2 发表于 2006-05-24 16:43 ·  中国 北京 联通
新手上路
一个忠实的FANS
积分 14
发帖 7
注册 2006-05-24 16:24
UID 55931
性别 男
状态 离线
@echo off
set a=0
for /f %%a in (你要搜索的文件.txt) do set a=%%a
echo %a%
3 发表于 2006-05-24 19:04 ·  中国 湖北 荆门 电信
荣誉版主
★★★
积分 2,013
发帖 718
注册 2006-02-18 07:07
UID 50550
状态 离线
灌个水,楼上的你是willsort兄的fans?
4 发表于 2006-05-24 22:52 ·  中国 广东 广州 白云区 电信
中级用户
★★
积分 466
发帖 237
注册 2005-10-12 20:53
UID 43413
状态 离线
vvillsort 莫非是 willsort 的马甲?
5 发表于 2006-05-24 23:44 ·  中国 山西 大同 中移铁通
元老会员
★★★★
Batchinger
积分 4,432
发帖 1,512
注册 2002-10-18 00:00
UID 19
性别 男
状态 离线
Re vvillsort:

你的代码思路我认同,只是增补一些细节。但即使如此,它仍然无法处理一些特殊的情况,比如当最后一行为空行时,比如此行含有某些“>|<”之类的特殊字符时。

如果楼主没有严格的需要,你的代码应该足够了。但是,我们可以将如何禁止for忽略空行以及如何实现原文echo作为研究题目,提高我们的水平,增加代码的质量。


@echo off & setlocal
set a=
for /f "delims=" %%a in (sample.txt) do set a=%%a
echo.%a%
※ Batchinger 致 Bat Fans:请访问 批处理编程的异类 ,欢迎交流与共享批处理编程心得!
6 发表于 2006-05-25 08:41 ·  中国 北京 顺义区 联通
新手上路
一个忠实的FANS
积分 14
发帖 7
注册 2006-05-24 16:24
UID 55931
性别 男
状态 离线
YES,三楼和四楼回答正确,我就是willsort传说中的粉丝 .......................哈哈哈
7 发表于 2006-05-25 10:00 ·  中国 浙江 杭州 电信
铂金会员
★★★★
网络独行侠
积分 6,962
发帖 2,753
注册 2003-04-16 00:00
UID 1565
性别 男
来自 河北保定
状态 离线
楼主没有限定不使用第三方工具,所以如果用sed来实现会更简单。

sed -ne "$p" sample.txt

"$p"表示打印最后一行,-n表示不显示其它内容,-e表示执行后面的脚本。
偶只喜欢回答那些标题和描述都很清晰的帖子!
如想解决问题,请认真学习“这个帖子”和“这个帖子”并努力遵守,如果可能,请告诉更多的人!
8 发表于 2006-05-25 11:35 ·  中国 湖北 荆州 电信
高级用户
★★★
积分 994
发帖 444
注册 2005-01-29 00:00
UID 35779
性别 男
状态 离线
晕倒....
9 发表于 2006-05-25 14:20 ·  中国 北京 联通
初级用户
积分 124
发帖 34
注册 2006-05-23 11:38
UID 55845
状态 离线
谢谢大家,学到了很多东西,多谢:)最近要写一些脚本,发现自己对这块还特别不了解,学习中。。。再次感谢
10 发表于 2006-05-25 16:33 ·  中国 浙江 杭州 电信
铂金会员
★★★★
网络独行侠
积分 6,962
发帖 2,753
注册 2003-04-16 00:00
UID 1565
性别 男
来自 河北保定
状态 离线
Originally posted by jawbin at 2006-5-25 11:35:
晕倒....

你晕倒什么?
偶只喜欢回答那些标题和描述都很清晰的帖子!
如想解决问题,请认真学习“这个帖子”和“这个帖子”并努力遵守,如果可能,请告诉更多的人!
11 发表于 2006-05-25 16:43 ·  中国 山西 临汾 中移铁通
元老会员
★★★★
Batchinger
积分 4,432
发帖 1,512
注册 2002-10-18 00:00
UID 19
性别 男
状态 离线
Re Climbing:

wingofsea 在顶楼已提出“写batch文件或者使用dos命令”,除非兄认为第三方工具也属于DOS命令。当然,你的回复很有用,不仅楼主受益,我也进一步巩固了sed的脚本基础。对兄表示感谢!
※ Batchinger 致 Bat Fans:请访问 批处理编程的异类 ,欢迎交流与共享批处理编程心得!
12 发表于 2006-05-25 19:03 ·  中国 浙江 杭州 电信
铂金会员
★★★★
网络独行侠
积分 6,962
发帖 2,753
注册 2003-04-16 00:00
UID 1565
性别 男
来自 河北保定
状态 离线
Re wil兄:

哈哈,我一向认为凡是能在dos下运行的命令就是dos命令,非局限于只有微软提供的DOS命令。我的原则就是:甭管黑猫白猫,能抓老鼠就是好猫。技术穷根究底固然重要,非唯此而不精,但在工作上则是以解决问题为第一要务。

以兄的水平,sed的这点儿小猫腻对你实在是太简单了,我是班门弄斧,见笑见笑。你说话现在水平越来越高了,到底有多高,怎么也得有十层楼那么高~~~~
偶只喜欢回答那些标题和描述都很清晰的帖子!
如想解决问题,请认真学习“这个帖子”和“这个帖子”并努力遵守,如果可能,请告诉更多的人!
13 发表于 2006-05-25 19:12 ·  中国 湖北 荆门 电信
荣誉版主
★★★
积分 2,013
发帖 718
注册 2006-02-18 07:07
UID 50550
状态 离线
如果只是纯粹地显示最后一行的话,这样几条命令无疑是效率高,容错好的:

@echo off
type %1
for /l %%i in (1,1,24) do echo.
pause>nul

其中的24表示屏幕的高度-1。
个人认为在处理文本内容方面,用VBS要比BAT合适得多。
14 发表于 2006-05-25 19:34 ·  中国 广东 深圳 电信
初级用户
积分 82
发帖 31
注册 2006-05-23 00:33
UID 55824
状态 离线
Originally posted by Climbing at 2006-5-25 10:00:
楼主没有限定不使用第三方工具,所以如果用sed来实现会更简单。

sed -ne "$p" sample.txt

"$p"表示打印最后一行,-n表示不显示其它内宠...



Climbing大侠,
这条命令如果遇到以空格的结尾是无效的,需要这么写:
sed "/^$/d" sample.txt|sed -ne "$p"
其中,要先用 " /^$/d" 过虑一下空行,让后再执行你这条命令.
班门弄斧了.
15 发表于 2006-05-25 22:13 ·  中国 河北 保定 移动
铂金会员
★★★★
网络独行侠
积分 6,962
发帖 2,753
注册 2003-04-16 00:00
UID 1565
性别 男
来自 河北保定
状态 离线
Re fan927:

多谢指正,只不过楼主要求显示最后一行,并没有说要过滤空行,当然,空行也算是最后一行,我是这么理解的,嘿嘿~~~

而且,似乎用你的方法也只能过滤空行,如果一行中有若干空格也是无法过滤的,所以,似乎这样更为妥当:
sed "/^ *$/d" sample.txt | sed -ne "$p"
偶只喜欢回答那些标题和描述都很清晰的帖子!
如想解决问题,请认真学习“这个帖子”和“这个帖子”并努力遵守,如果可能,请告诉更多的人!
论坛跳转: