[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖
  通过反复测试,发现顶楼代码速度的瓶颈在于频繁的 set /a 运算,如果换成 set 的赋值语句而不是set的数值运算语句,速度将大为提升。

  以下代码应当可以提高一点速度,但是会带来两个副作用:1、CPU占用飙升,将会达到100%;2、使用了临时文件:
  1. @echo off
  2. for /f "tokens=2 delims=_." %%i in ('dir /b abc\*.txt') do (
  3.     set ID_%%i=0
  4. )
  5. set ID_>tmp
  6. for /f "delims=:" %%i in ('findstr /n . tmp') do set num=%%i
  7. echo %num%
  8. echo %t%
  9. echo %time%
  10. pause
复制代码
  由于通过重定向符号>把内容倒入文本中后,会在最后一行形成仅含回车符号的空行,无法通过 findstr /n  /v "$" tmp 语句来快速获取最后一行的行号,只能逐行编号,通过set语句把最后一行的行号赋予num,使得效率大为减慢。
1

评分人数

尺有所短寸有所长,学好批处理没商量;
考虑问题复杂化,解决问题简洁化。

心在天山,身老沧州。

TOP

  7楼的代码在原有文本末尾强制添加换行符号,构造出一个带回车换行的空行,并巧妙地利用了findstr的特点,一举节约了大量时间,妙哉。
  本帖解决问题的过程堪称经典,十分具有借鉴意义,高亮之。
尺有所短寸有所长,学好批处理没商量;
考虑问题复杂化,解决问题简洁化。

心在天山,身老沧州。

TOP

  哈哈,有更巧妙的方法出现了,更加有效率——不过后一句的文件名写错了,应该是tmp。
尺有所短寸有所长,学好批处理没商量;
考虑问题复杂化,解决问题简洁化。

心在天山,身老沧州。

TOP

  虽然楼上的代码避免了使用临时文件,但是,和其他使用了临时文件的代码相比,效率是很低下的,原因我在前面已经提过,那就是频繁地使用了 set /a 语句。
尺有所短寸有所长,学好批处理没商量;
考虑问题复杂化,解决问题简洁化。

心在天山,身老沧州。

TOP

返回列表