:
你的第一个代码:
问题出在这一句if "!var_!"=="" endlocal &goto :eof
当 if 条件成立时,endlocal 结束了所有本地变量,也就是说把你的%2和%3的值都清空了。
:
你的第二个代码:
代码本身没有问题,但作为 函数调用,就有不足之处,
因为在你的代码中把var和var_ 都被定了义,回到call处时,var和var_没有被清空,
这样别人在调用你的函数之前,如果把var赋了别的值,那么你的函数,就把他原来的值改变了。
建议将set var=%~1也放在延迟变量里去,
:
测试代码如下:
::- @echo off
- set "str=haoren就是"
- set var=12345
- set var_=aaaaaa
-
- call :GetStrLenAndStrB %str% strlen bytes
- echo %strlen% %bytes%
- echo %var%
- echo %var_%
- pause>nul
- :GetStrLenAndStrB Str strlen bytes
- for /l %%i in (0 1 200) do (
- setlocal enabledelayedexpansion
- set var=%~1
- set "var_=!var:~%%i,1!"
- if "!var_!"=="" goto :eof
- if !var_! gtr Z (endlocal & set /a %3+=2) else endlocal & set /a %3+=1
- set /a %2+=1
- )
复制代码
[ 本帖最后由 随风 于 2007-11-15 21:21 编辑 ] |