改了一下,减少了一次goto :lp循环,并且for /l 次数也从30降为21,速度有所提升- @echo off&setlocal enabledelayedexpansion
- set str=
- :rep
-
-
- set/a end=8189,add=end
- :lp
- if %add%==1 goto :ok
- set /a ben=end-add,add=^(end-ben+20^)/21
- for /l %%a in (%ben%,%add%,%end%) do (if "!str:~%%a,1!"=="" set end=%%a&goto :lp)
- set end=0
- :ok
- echo %end%
-
-
-
- set str=!str!a
- pause
- goto :rep
复制代码 二楼说的最简单的方法应该是这个吧:
str 为字符串变量-
- if not defined str set num=0&goto :ok
- for /l %%a in (0,1,8189) do (if "!str:~%%a,1!"=="" set num=%%a&goto :ok)
- :ok
复制代码 此法并非不可用,只是效率一般,串越长越慢
虽然只有一个for ,并且for /l的速度很快,但是也需要时间的
因为在系统在解释for /l时已经分配了8189次if "!str...命令行
[ 本帖最后由 netbenton 于 2009-4-23 17:56 编辑 ] |