标题: [文本处理] 批处理for循环快速计算数目可否有更快方法? [打印本页]
作者: delab-1 时间: 2024-9-18 12:02 标题: 批处理for循环快速计算数目可否有更快方法?
各位大神,有一个初级但是较为困惑的问题请教大家。我在多个文件中,需要算其所包含文本行的个数,我利用如下循环语句,计算其行数(numb):- setlocal enabledelayedexpansion
- set /a numb=0
- for /f %%c in (std_map_expt_HS2.txt) do (set /a numb+=1)
复制代码
因为这个计算过程需要一个一个查找文本行,在文件较大时需要较长时间的耗时,特别是多文件重复上述计算时,消耗的时间太长。
我请教大家,在这种情况下有没有减少计算时间的方法?
作者: qixiaobin0715 时间: 2024-9-18 12:08
- find /v /c "" std_map_expt_HS2.txt
复制代码
作者: qixiaobin0715 时间: 2024-9-18 15:44
多文件统计总行数:- type *.txt 2>nul|find /v /c ""
复制代码
作者: delab-1 时间: 2024-9-18 17:04
回复 2# qixiaobin0715
太感谢了,效率大幅度提高 :handshake
作者: delab-1 时间: 2024-9-18 17:08
回复 3# qixiaobin0715
type *.txt 2>nul|find /v /c ""
这个写法非常高效,我也运行成功了 ,但是为何要在type *.txt后面加个2?可否帮助解释一下?另外,我也试过了,如果不加2,输出的结果为零,是错误的。
作者: qixiaobin0715 时间: 2024-9-18 17:13
主要是屏蔽多余的显示内容,你可以把2>nul去掉试试。
作者: delab-1 时间: 2024-9-18 17:28
回复 6# qixiaobin0715
非常感谢,已经测试了,去掉2>null后不影响运行,而且结果也是正确的。完美的是,这个写法只显示单独的数据值,非常干净。
例如,如果写程序为:find /v /c STD_MAP_EXPORT_HS2.TXT >temp.txt 输出结果为---------- STD_MAP_EXPORT_HS2.TXT: 7819
如果写type STD_MAP_EXPORT_HS2.TXT|find /v /c "" 输出结果为7819。
第二个输出格式对于后续处理很方便,避免了取值和去掉空格等问题。
作者: Batcher 时间: 2024-9-18 20:22
回复 1# delab-1
参考:
http://bbs.bathome.net/thread-474-2-1.html#pid28474
作者: 77七 时间: 2024-9-18 21:22
- @echo off
- cd /d "%~dp0"
- for %%i in (*.txt) do (
- for /f %%a in ('find /c /v "" ^< "%%i"') do (
- echo %%i %%a
- set /a n+=%%a
- )
- )
- echo %n%
- pause
复制代码
作者: delab-1 时间: 2024-9-19 12:24
回复 9# 77七
太感谢了,非常完美的程序! :handshake
另外,可否稍微讲一下^<和<在使用的差异和注意事项么?是不是^<用在For命令中,而<可以用在其他非for情况,我做了测试,似乎是我估计的这样。
作者: 77七 时间: 2024-9-19 13:04
回复 10# delab-1
应该和预处理有关,以下代码举个例子,比如不写^,整个语句就会被分割。
for /f "delims=" %%a in ('type *.txt | find "abc"') do echo %%a
先执行 - for /f "delims=" %%a in ('type *.txt
复制代码
for /f 是特定的语句,现在不完整了,代码会闪退
有兴趣深入了解可以参考:
批处理文章:预处理、变量延迟、call
for /f 与 cmd /c 的 command 处理
作者: delab-1 时间: 2024-9-20 10:02
回复 11# 77七
太感谢了,非常有帮助! :handshake
作者: delab-1 时间: 2024-9-20 10:03
回复 8# Batcher
谢谢楼主,我正在努力学习中,非常感谢 :handshake
作者: Five66 时间: 2024-9-21 13:07
find /v /c ""
貌似末尾有连续空行时会少算一行
欢迎光临 批处理之家 (http://bbs.bathome.net/) |
Powered by Discuz! 7.2 |