中国DOS联盟

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

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

中国DOS联盟论坛
现在时间是 2026-07-29 17:52
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » 怎么显示一文本的行数(总数) 查看 2,908 回复 17
楼 主 怎么显示一文本的行数(总数) 发表于 2007-02-26 09:07 ·  中国 北京 中国科学院研究生院
银牌会员
★★★
积分 1,187
发帖 555
注册 2006-12-21 07:35
19年会员
UID 74129
性别 男
状态 离线
如题。
2 发表于 2007-02-26 09:31 ·  中国 北京 中国科学院研究生院
银牌会员
★★★
积分 1,187
发帖 555
注册 2006-12-21 07:35
19年会员
UID 74129
性别 男
状态 离线
for /f "delims=" %%i in (l.txt) do (set/a num+=1)

echo len=%num%

但是以行中若是回车符号,结果就不对,怎么改,谢谢!
3 发表于 2007-02-26 09:48 ·  中国 宁夏 银川 电信
金牌会员
★★★★
积分 4,103
发帖 1,744
注册 2006-01-20 13:00
20年会员
UID 49241
性别 男
来自 甘肃.临泽
状态 离线
看你要不要空行和开头是;的行了
4 发表于 2007-02-26 09:57 ·  中国 北京 中国科学院研究生院
银牌会员
★★★
积分 1,187
发帖 555
注册 2006-12-21 07:35
19年会员
UID 74129
性别 男
状态 离线
都要
只要一行中有字符,不管是什么字符

包括只有一个回车符号的行

[ Last edited by scriptor on 2007-2-25 at 09:42 PM ]
5 发表于 2007-02-26 11:00 ·  中国 宁夏 银川 电信
金牌会员
★★★★
积分 4,103
发帖 1,744
注册 2006-01-20 13:00
20年会员
UID 49241
性别 男
来自 甘肃.临泽
状态 离线
Originally posted by scriptor at 2007-2-26 09:57:
都要
只要一行中有字符,不管是什么字符

包括只有一个回车符号的行

[ Last edited by scriptor on 2007-2-25 at 09:42 PM ]

那还是用sed好了 sed -n $= life
因为当文件中有空行时用findstr /N . life还是会忽略空行的
6 发表于 2007-02-26 11:23 ·  中国 北京 中国科学院研究生院
银牌会员
★★★
积分 1,187
发帖 555
注册 2006-12-21 07:35
19年会员
UID 74129
性别 男
状态 离线
我的l.txt的内容是:
w

e
我的bat文件是:
@echo off
for /f "delims=" %%i in ('find /v /i /n "" l.txt') do (set/a num+=1)
echo len=%num%
pause>nul


结果为4,但是只有三行啊??
难道要这样减去1才对?这是什么道理?
还有别的方法不?
7 发表于 2007-02-26 11:45 ·  中国 陕西 西安 电信
铂金会员
★★★★
积分 5,212
发帖 2,478
注册 2007-02-08 23:39
19年会员
UID 79003
性别 男
状态 离线
脚本吧
8 发表于 2007-02-26 11:53 ·  中国 北京 中国科学院研究生院
银牌会员
★★★
积分 1,187
发帖 555
注册 2006-12-21 07:35
19年会员
UID 74129
性别 男
状态 离线
你是说用vbs或js?

那个当然可以。可是我要的是bat的
9 发表于 2007-02-26 23:07 ·  中国 安徽 马鞍山 电信
中级用户
★★
积分 493
发帖 228
注册 2007-02-16 00:38
19年会员
UID 79596
性别 男
来自 安徽
状态 离线
@echo off
setlocal enabledelayedexpansion
set i=0
for /f %%a in (1.txt) do (
set /a i+=1
echo !i! %%a >>1new.txt
)

不能包括空行!

[ Last edited by xycoordinate on 2007-2-26 at 10:10 AM ]
10 发表于 2007-02-26 23:52 ·  中国 山东 济南 电信
初级用户
积分 125
发帖 44
注册 2007-01-24 15:31
19年会员
UID 77555
性别 女
状态 离线
scriptor兄
给你个变态方法!!哈哈利用一下SET /A的小BUG

@ECHO %DBG% OFF & SETLOCAL ENABLEDELAYEDEXPANSION

FOR /F %%i IN ('findstr /n . l.txt') DO SET /A LEN=%%i 2>nul
ECHO %LEN%
本帖最近评分记录 (共 3 条) 点击查看详情
评分人分数时间
zh159 +3 2007-02-27 00:03
xycoordinate +2 2007-05-05 10:48
scriptor +4 2007-09-09 13:17
11 发表于 2007-02-27 00:01 ·  中国 湖北 武汉 硚口区 电信
版主
★★★★★
积分 11,386
发帖 4,938
注册 2006-07-23 17:10
20年会员
UID 59080
状态 离线

  可以处理空行及包含其它字符的行:
@echo off
for /f "tokens=1 delims=:" %%a in ('findstr /n .* 1.txt') do set a=%%a
echo The length of file 1.txt is %a%
pause&exit/b0
本帖最近评分记录 (共 3 条) 点击查看详情
评分人分数时间
xycoordinate +4 2007-05-05 10:46
scriptor +6 2007-09-09 13:17
dgoogd +1 2008-08-19 08:30
12 发表于 2007-02-27 00:02 ·  中国 广西 玉林 博白县 电信
金牌会员
★★★★
积分 3,687
发帖 1,467
注册 2005-08-08 12:00
20年会员
UID 44210
状态 离线
10 楼的效果和:
@echo off
FOR /F "delims=:" %%i IN ('findstr /n . a.txt') DO SET LEN=%%i
ECHO %LEN%
pause

是一样的,利用了set/a去除了数字后面的“:”字符

SET LEN=%%i:设置LEN等于findstr /n显示的行数(不用计数),包含所有行

[ Last edited by zh159 on 2007-2-26 at 11:04 AM ]
13 发表于 2007-05-05 10:47 ·  中国 安徽 马鞍山 电信
中级用户
★★
积分 493
发帖 228
注册 2007-02-16 00:38
19年会员
UID 79596
性别 男
来自 安徽
状态 离线
Originally posted by zh159 at 2007-2-27 00:02:
10 楼的效果和:
@echo off
FOR /F "delims=:" %%i IN ('findstr /n . a.txt') DO SET LEN=%%i
ECHO %LEN%
pause

是一样的,利用了set/a去除了数字后面的“:”字符

SET LEN=%%i:设置LEN等于findstr /n显示的行数(不用计数),包含所有行


10楼的,主要是用了2>nul,妙!!!

[ Last edited by xycoordinate on 2007-5-5 at 10:49 AM ]
14 发表于 2007-12-24 01:10 ·  中国 陕西 汉中 电信
新手上路
积分 19
发帖 5
注册 2007-10-10 15:51
18年会员
UID 99367
性别 男
状态 离线
look!
<a href="http://www.cn-dos.net/forum/viewthread.php?tid=33878&fpage=1&highlight=%E8%A1%8C%E6%95%B0" target="_blank">批处理中如何判断一个文本中的行数</a>
15 发表于 2007-12-24 09:03 ·  中国 四川 泸州 联通
高级用户
★★★
积分 609
发帖 374
注册 2006-08-02 22:38
19年会员
UID 59720
状态 离线
没明白?为什么速度比
find /v /c "" 1.txt>cs.txt
for /f "tokens=2 delims=:" %%i in (cs.txt) do @echo %%i
慢很很多呢??
论坛跳转: