[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖
对上述的两种方法进行了稍许改进,并且自己新加了一种方法,并加以比较运行效率。得出对于1000个字符的(似乎最长也只能处理长度为1000左右的字符串)长度计算,三楼方法(改进后)比二楼快约500毫秒,新方法(法三)效率与二楼相当,是在我的机子上。所以如果求的字符串数量很多的话(如成千上万个),还是用第二种方法较好!
       测试字符串生成可以用如下命令  @set /p=%random%<nul >>a.txt&%0
       新加了法四,batman的高见!
  1. @echo off&setlocal enabledelayedexpansion
  2. set /p "var=请输入字符串:"
  3. echo ========================
  4. echo [法一]
  5. set time1=%time%
  6. set /a time1_second=1%time1:~-5,2%-100
  7. set /a time1_millisec=1%time1:~-2,2%-100
  8. rem ----------[法一]主程序开始---------------------
  9. :loop
  10. set /a a+=1
  11. if not "!var:~%a%,1!" equ "" goto :loop
  12. echo 共有%a%个字符
  13. rem ----------[法一]主程序结束---------------------
  14. set time2=%time%
  15. set /a time2_second=1%time2:~-5,2%-100
  16. set /a time2_millisec=1%time2:~-2,2%-100
  17. if %time2_millisec% lss %time1_millisec% set /a time2_millisec+=100&set /a time2_second-=1
  18. set /a second=time2_second-time1_second
  19. set /a millisec=time2_millisec-time1_millisec
  20. echo 开始时间:%time1%  结束时间:%time2%
  21. echo 程序1运行时间为%second%秒%millisec%0毫秒
  22. echo ========================
  23. echo [法二]
  24. set time1=%time%
  25. set /a time1_second=1%time1:~-5,2%-100
  26. set /a time1_millisec=1%time1:~-2,2%-100
  27. rem ----------[法二]主程序开始---------------------
  28. for /l %%a in (0,1,10000) do if "!var:~%%a,1!" equ "" set length=%%a&goto end
  29. :end
  30. echo 共有%length%个字符
  31. rem ----------[法二]主程序结束---------------------
  32. set time2=%time%
  33. set /a time2_second=1%time2:~-5,2%-100
  34. set /a time2_millisec=1%time2:~-2,2%-100
  35. if %time2_millisec% lss %time1_millisec% set /a time2_millisec+=100&set /a time2_second-=1
  36. set /a second=time2_second-time1_second
  37. set /a millisec=time2_millisec-time1_millisec
  38. echo 开始时间:%time1%  结束时间:%time2%
  39. echo 程序2运行时间为%second%秒%millisec%0毫秒
  40. echo ========================
  41. echo [法三]
  42. set time1=%time%
  43. set /a time1_second=1%time1:~-5,2%-100
  44. set /a time1_millisec=1%time1:~-2,2%-100
  45. rem ----------[法三]主程序开始---------------------
  46. set count=0
  47. :loop2
  48. set /a num+=1
  49. for /f %%i in ("%num%") do if not "!var:~%%i,1!"=="" goto loop2
  50. echo 共有%num%个字符
  51. rem ----------[法三]主程序结束---------------------
  52. set time2=%time%
  53. set /a time2_second=1%time2:~-5,2%-100
  54. set /a time2_millisec=1%time2:~-2,2%-100
  55. if %time2_millisec% lss %time1_millisec% set /a time2_millisec+=100&set /a time2_second-=1
  56. set /a second=time2_second-time1_second
  57. set /a millisec=time2_millisec-time1_millisec
  58. echo 开始时间:%time1%  结束时间:%time2%
  59. echo 程序3运行时间为%second%秒%millisec%0毫秒
  60. echo ========================
  61. echo [法四] batman's idea
  62. set time1=%time%
  63. set /a time1_second=1%time1:~-5,2%-100
  64. set /a time1_millisec=1%time1:~-2,2%-100
  65. rem ----------[法四]主程序开始---------------------
  66. echo %var%>a.txt
  67. echo.>>a.txt
  68. for /f "tokens=1 delims=:" %%i in ('findstr /o .* a.txt') do set /a length=%%i-2&if not %%i  
  69. equ 0 echo 共有%length%个字符&goto end
  70. :end
  71. del a.txt
  72. rem ----------[法四]主程序结束---------------------
  73. set time2=%time%
  74. set /a time2_second=1%time2:~-5,2%-100
  75. set /a time2_millisec=1%time2:~-2,2%-100
  76. if %time2_millisec% lss %time1_millisec% set /a time2_millisec+=100&set /a time2_second-=1
  77. set /a second=time2_second-time1_second
  78. set /a millisec=time2_millisec-time1_millisec
  79. echo 开始时间:%time1%  结束时间:%time2%
  80. echo 程序4运行时间为%second%秒%millisec%0毫秒
  81. pause>nul
复制代码
刚有些小问题,已修改,大家运行看看!!!

[ 本帖最后由 lhjoanna 于 2008-11-29 21:46 编辑 ]
1

评分人数

    • wxcute: 新手题也研究得这么细,PFPB + 8

TOP

  1. @echo off&setlocal EnableDelayedExpansion
  2. set "var=1234567890   1 $"
  3. :loop
  4. set /a a+=1
  5. if not "!var:~%a%,1!" equ "" (goto :loop) else (echo %var%&echo. %a%&pause)
复制代码
效率极为低下.
1

评分人数

    • wxcute: 先考虑解决的办法,效率问题慢慢改进。PB + 7
for /f "delims=" %%a in ('%0') do (echo %%a)

TOP

返回列表