标题: 批处理计算一文本文件的行数 [打印本页]
作者: ieutk 时间: 2008-1-4 13:52 标题: 批处理计算一文本文件的行数
先把下面的COPY到你电脑上保存为list.txt- abcealsdf
- sadflkew
- s657
- pe34
-
- 534
-
-
- as4
-
- 563djhuqe
- d
复制代码
写一批处理计算此文件有多少行
[ 本帖最后由 ieutk 于 2008-1-4 14:18 编辑 ]
作者: myweb9169 时间: 2008-1-4 19:19
- @echo off
- for /f " delims=:" %%i in ('findstr /n "\<d\>" "list.txt"') do echo 共有:%%i行
- pause
复制代码
好像有内容一样的行就不行了
另外,这样也能,但想不通var值为什么是最后的值,而不是全部的值
@echo off
for /f " delims=:" %%i in ('findstr /n .* "list.txt"') do set var=%%i
echo %var%
pause
作者: 随风 时间: 2008-1-4 21:29
@echo off
for /f " delims=:" %%i in ('findstr /n "\<b\>" "a.txt"') do echo 共有:%%i行
pause
这段代码还真没看懂,
\<d\> 不是精确匹配字符串么? 这里匹配 d 是什么意识?而且换成别的字符就不行了.
难道 d 有什么特殊含义?
@echo off
for /f " delims=:" %%i in ('findstr /n .* "list.txt"') do set var=%%i
echo %var%
pause
这段代码var的值当然是最后的值
因为用findstr /n 打印了行号后,再用冒号作分割符,%%i的值就是行号,从1到12
而var的值也是依次是1到12 到了最后,当然就是最后的值了.
作者: myweb9169 时间: 2008-1-4 22:00
这里匹配 d 是什么意识?而且换成别的字符就不行了.
难道 d 有什么特殊含义?
想的太复杂了,这里的d只是本题中最后一行字符串的值,没什么特殊含义,呵呵
作者: ieutk 时间: 2008-1-5 00:17
@echo off
for /f " delims=:" %%i in ('findstr /n "\<d\>" "list.txt"') do echo 共有:%%i行
pause
这个代码可是可以,不过不太实际,如果文件最后不是d呢,所以还是用你下面的那个代码
作者: novaa 时间: 2008-1-7 19:17
- @echo off
- for /f "tokens=1 delims=:" %%i in ('findstr /n .* a.txt') do set Line=%%i
- echo %Line%
- pause
复制代码
作者: 希望的寄托 时间: 2008-2-19 13:10
历害历害,太历害了,我发现这个命令好难了
要是有像FOR那里面的通俗讲法就好了
作者: duanxianfell 时间: 2008-3-19 21:13
'findstr /n "\<d\>" 这个是什么意思?
作者: ieutk 时间: 2008-3-20 00:32
还请楼上兄弟另幵一贴来提问,以方便论坛的管理,多谢合作
'findstr /n "\<d\>" 这个是什么意思?
/N 在匹配的每行前打印行数。
"\<d\>" 是精确查找的意思
"\<......\>" 格式是这样的,中间的省略号代表你要精确查找的内容
作者: zhangxiaopeng 时间: 2008-4-4 11:13
二楼for /f "delims=:" %%i in ('findstr /n "\<d\>" "1.txt"') do set var=%%i
里面的"\<d\>"改为".*d\>"或是"d\<"都可以 ,更奇怪的是:".*d\>"里面的d改为任一字母都行。。。是不是这个命令本身就不需要。
作者: xiaoxx 时间: 2008-4-27 19:13
findstr的/n参数很好用。
但感觉还是不够底层。每行的分割符其实是那个看不见的回车啊.
for /f %%i in (a.txt) do ...感觉就像是bug了.
作者: wjta 时间: 2008-4-28 22:55
还请楼上兄弟另幵一贴来提问,以方便论坛的管理,多谢合作
引用:
'findstr /n "\<d\>" 这个是什么意思?
/N 在匹配的每行前打印行数。
"\<d\>" 是精确查找的意思
"\<......\>" 格式是这样的,中间的省略号代表你要精确查找的内容
谢谢你这么有耐心,学习.....
作者: tangfu 时间: 2008-6-10 23:45
终于搞懂了,for /f 默认循环第一列,所以findstr /n ....
1:abcealsdf
2:sadflkew
3:s657
4:pe34
5:
6:534
7:
8:
9:as4
10:
11:563djhuqe
12:d
后,用delims=:,可以分割出行号.....
作者: plp626 时间: 2008-6-11 19:10
文件非空行数:
- findstr/n . list.txt|find /c /v ""
复制代码
文件总行数(包括空行):
- type list.txt|find /c /v ""
复制代码
作者: 随风 时间: 2008-6-11 19:32
楼上强!
作者: wankoilz 时间: 2008-6-13 22:07
find /c /v ""
这是什么意思呢,居然结果直接就是个数字...不解..
作者: keen 时间: 2009-4-4 23:35
- @echo off
- for /f "tokens=1 delims=:" %%i in ('findstr /n .* a.txt') do set a=%%i
- echo %a%&pause
复制代码
作者: cainiao736 时间: 2009-4-6 22:47
14楼的好牛,学到了find的用法
作者: rat 时间: 2009-4-7 00:42
ding 14L.
Use the debug.exe:- @for /f "skip=1 tokens=2" %%a in ('more /e +1 "%~f0"^|debug^|find ":0110"') do @set/an=0x%%a-4&call echo %%n%%&pause>nul&exit/b
- a100
- CMP BYTE PTR [BX+0111],0D
- JNZ 010B
- INC BYTE PTR [0110]
- INC BX
- LOOP 0100
- INT 20
-
- nlist.txt
- l111
- g
- d110l1
- q
复制代码
作者: energy2009 时间: 2009-4-8 20:18
楼上的汇编写的什么,感觉您好牛啊!
麻烦注释下。。。3Q!
作者: sjzong 时间: 2009-5-4 23:35
find 命令真厉害!!
作者: keen 时间: 2009-5-5 16:17
find /o 法:- @echo off
- for /f "delims=:" %%i in ('findstr /o .* list.txt') do set /a n+=1
- echo 总共有%n%行!&pause>nul
复制代码
作者: Batcher 时间: 2009-5-5 18:02 标题: 回复 22楼 的帖子
加上多余的/o开关会影响效率的吧?
其它几种方法:- @echo off
- for /f "tokens=1 delims=:" %%a in ('findstr /n .* a.txt') do (
- set RowNum=%%a
- )
- echo %RowNum%
- rem 10万行文本的测试结果:3分14.46秒
- rem 15:45:22.25
- rem 100000
- rem 15:48:36.71
复制代码
- @echo off
- for /f "tokens=2 delims=:" %%a in ('find /v /c "" a.txt') do (
- set "RowNum=%%a"
- goto :print
- )
- :print
- set "RowNum=%RowNum: =%"
- echo %RowNum%
- rem 10万行文本的测试结果:8.95秒
- rem 15:54:04.05
- rem 100000
- rem 15:54:13.00
复制代码
- @echo off
- for /f %%a in (a.txt) do (
- set /a RowNum+=1
- )
- echo,%RowNum%
- rem 10万行文本的测试结果:5.20秒
- rem 15:51:30.55
- rem 100000
- rem 15:51:35.75
复制代码
- @echo off
- for /f %%a in ('type a.txt ^| find /c /v ""') do (
- set "RowNum=%%a"
- )
- echo,%RowNum%
- rem 10万行文本的测试结果:2.92秒
- rem 15:57:54.64
- rem 100000
- rem 15:57:57.56
复制代码
作者: keen 时间: 2009-5-5 23:03 标题: 回复 23楼 的帖子
针对这个题目(list.txt文本中只有很少的内容),没有考虑效率。
当然,如果list.txt中的内容很多的话,效率的确是问题!!!
我只是想着一题多解。
谢谢指正。
作者: wjjy 时间: 2009-5-6 05:15
- @echo off
- for /f %%i in ('findstr /n "$" a.txt') do set/a a+=1
- echo %a%
- pause
复制代码
作者: keen 时间: 2009-5-6 09:25 标题: 回复 25楼 的帖子
哥们,好像少了一行?
研究发现,当a.txt中最后的光标放在最后一行的下一行时,计算正确。
如果最后的光标跟最后一行是一行,计算结果少一行。
所以 "$" 效果不是很好。
建议,还是把"$" 改成 ".*"
[ 本帖最后由 keen 于 2009-5-6 09:40 编辑 ]
作者: sjzong 时间: 2009-5-6 22:56 标题: 我也来试试
- @echo off
- for /f "tokens=1 delims=:" %%i in ('findstr /n .* a.txt') do set a=%%i
- echo 总行数(包括空行)是:%a%
- set/a b=0
- for /f "tokens=1 delims=:" %%i in ('findstr /n . a.txt') do set/a b+=1
- echo 总行数(扣除空行)是:%b%
- pause
复制代码
[ 本帖最后由 sjzong 于 2009-5-6 23:04 编辑 ]
作者: sjzong 时间: 2009-5-6 23:25 标题: 回复 16楼 的帖子
find /c /v "" :将显示不包含指定字符串的行数。指定字符串为分号内的内容,(这边""我认为是空的,不知这样认为行吗?)
例如:find /c /v "a" 是计算不包括字符a的行的总数
假设有a.txt文件,内容如下:
acbda
dendf
sdds
a
b
de
运行命令 find /c /v "a" a.txt
结果:4
运行命令 find /c /v "d" a.txt
结果:2
[ 本帖最后由 sjzong 于 2009-5-6 23:36 编辑 ]
作者: wq1282 时间: 2009-6-29 12:18
原帖由 plp626 于 2008-6-11 19:10 发表
文件非空行数:
findstr/n . list.txt|find /c /v ""
文件总行数(包括空行):
type list.txt|find /c /v ""
文件非空行数:
复制内容到剪贴板代码:
findstr/n . list.txt|find /c /v ""文件总行数(包括空行):
复制内容到剪贴板代码:
type list.txt|find /c /v ""很强
作者: lovelymorning 时间: 2009-6-29 16:09
findstr /xvn .* a.txt
for /f "delims=:" %%a in ('findstr /xvn .* a.txt') do (echo 总有:%%a行)
find /c /v /n "" a.txt
for /f "tokens=2 delims=:" %%a in ('find /c /v /n "" a.txt') do (echo 总有:%%a行)
[ 本帖最后由 lovelymorning 于 2009-6-29 16:12 编辑 ]
作者: johnson3333 时间: 2009-7-2 15:17
- ::批处理计算一文本文件的行数
- @echo off
- set /a count=0
- for /f "delims=" %%a in (list.txt) do (if "%%a" neq "" set /a count+=1)
- echo;%count%
- pause
复制代码
关于空行部分不知道怎么判断。这样弄出来要多一个空行,不知道为什么。
[ 本帖最后由 johnson3333 于 2009-7-2 15:22 编辑 ]
作者: kevinpeng 时间: 2009-8-15 16:13
总行数(包含空行):- findstr .* list.txt |find /c /v ""
复制代码
作者: poxi 时间: 2010-7-19 22:25
答:
是不是这样
- @echo off
- for /f " delims=:" %%i in ('findstr /n .* "a.txt"') do set /a h+=1
- echo %h%
- pause
复制代码
============
end;
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |