找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
楼主: ieutk

批处理计算一文本文件的行数

[复制链接]
发表于 2008-6-13 22:07:31 | 显示全部楼层
find /c /v ""
这是什么意思呢,居然结果直接就是个数字...不解..
发表于 2009-4-4 23:35:47 | 显示全部楼层
  1. @echo off
  2. for /f "tokens=1 delims=:" %%i in ('findstr /n .* a.txt') do set a=%%i
  3. echo %a%&pause
复制代码
发表于 2009-4-6 22:47:21 | 显示全部楼层
14楼的好牛,学到了find的用法
发表于 2009-4-7 00:42:30 | 显示全部楼层
ding 14L.
Use the debug.exe:
  1. @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
  2. a100
  3. CMP     BYTE PTR [BX+0111],0D
  4. JNZ     010B
  5. INC     BYTE PTR [0110]
  6. INC     BX
  7. LOOP    0100
  8. INT     20

  9. nlist.txt
  10. l111
  11. g
  12. d110l1
  13. q
复制代码
发表于 2009-4-8 20:18:12 | 显示全部楼层
楼上的汇编写的什么,感觉您好牛啊!
麻烦注释下。。。3Q!
发表于 2009-5-4 23:35:44 | 显示全部楼层
find 命令真厉害!!
发表于 2009-5-5 16:17:34 | 显示全部楼层
find /o 法:
  1. @echo off
  2. for /f "delims=:" %%i in ('findstr /o .* list.txt') do set /a n+=1
  3. echo 总共有%n%行!&pause>nul
复制代码
发表于 2009-5-5 18:02:45 | 显示全部楼层

回复 22楼 的帖子

加上多余的/o开关会影响效率的吧?

其它几种方法:
  1. @echo off
  2. for /f "tokens=1 delims=:" %%a in ('findstr /n .* a.txt') do (
  3.     set RowNum=%%a
  4. )
  5. echo %RowNum%
  6. rem 10万行文本的测试结果:3分14.46秒
  7. rem 15:45:22.25
  8. rem 100000
  9. rem 15:48:36.71
复制代码
  1. @echo off
  2. for /f "tokens=2 delims=:" %%a in ('find /v /c "" a.txt') do (
  3.     set "RowNum=%%a"
  4.     goto :print
  5. )
  6. :print
  7. set "RowNum=%RowNum: =%"
  8. echo %RowNum%
  9. rem 10万行文本的测试结果:8.95秒
  10. rem 15:54:04.05
  11. rem 100000
  12. rem 15:54:13.00
复制代码
  1. @echo off
  2. for /f %%a in (a.txt) do (
  3.         set /a RowNum+=1
  4. )
  5. echo,%RowNum%
  6. rem 10万行文本的测试结果:5.20秒
  7. rem 15:51:30.55
  8. rem 100000
  9. rem 15:51:35.75
复制代码
  1. @echo off
  2. for /f %%a in ('type a.txt ^| find /c /v ""') do (
  3.         set "RowNum=%%a"
  4. )
  5. echo,%RowNum%
  6. rem 10万行文本的测试结果:2.92秒
  7. rem 15:57:54.64
  8. rem 100000
  9. rem 15:57:57.56
复制代码
发表于 2009-5-5 23:03:34 | 显示全部楼层

回复 23楼 的帖子

针对这个题目(list.txt文本中只有很少的内容),没有考虑效率。
当然,如果list.txt中的内容很多的话,效率的确是问题!!!
我只是想着一题多解。
谢谢指正。
发表于 2009-5-6 05:15:20 | 显示全部楼层
  1. @echo off
  2. for /f %%i in ('findstr  /n  "$" a.txt') do  set/a a+=1
  3. echo %a%
  4. pause
复制代码
发表于 2009-5-6 09:25:31 | 显示全部楼层

回复 25楼 的帖子

哥们,好像少了一行?

研究发现,当a.txt中最后的光标放在最后一行的下一行时,计算正确。
如果最后的光标跟最后一行是一行,计算结果少一行。
所以  "$"  效果不是很好。

建议,还是把"$" 改成 ".*"

[ 本帖最后由 keen 于 2009-5-6 09:40 编辑 ]
发表于 2009-5-6 22:56:09 | 显示全部楼层

我也来试试

  1. @echo off
  2. for /f "tokens=1 delims=:" %%i in ('findstr /n .* a.txt') do set a=%%i
  3. echo 总行数(包括空行)是:%a%
  4. set/a b=0
  5. for /f "tokens=1 delims=:" %%i in ('findstr /n . a.txt') do set/a b+=1
  6. echo 总行数(扣除空行)是:%b%
  7. pause
复制代码

[ 本帖最后由 sjzong 于 2009-5-6 23:04 编辑 ]
发表于 2009-5-6 23:25:47 | 显示全部楼层

回复 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 编辑 ]
发表于 2009-6-29 12:18:16 | 显示全部楼层
原帖由 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 ""很强
发表于 2009-6-29 16:09:19 | 显示全部楼层
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 编辑 ]
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-17 00:54 , Processed in 0.020847 second(s), 6 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表