[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖
作为一个随时调用的函数,你不可能修改批处理,这样实在无爱。。。

还是要作为传值参数一样,call的时候给值,然后标签里%1使用。。。

另外,我那个函数应该是可以的,你再看看:

@echo off
setlocal enabledelayedexpansion
:loop
set /p a=Type :
call :StrLen "vl" "%a%"
echo Length : %vl%
pause>nul
goto loop
:StrLen
setlocal enableextensions
set "str=a%~2"
set "str=%str:"=s%"
set "str=%str:^^=s%"
set "str=!str:%%=s!"
set /a strlength=0
:StrLen_1
set /a strlength+=1
if not "!str:~%strlength%,1!"=="" goto StrLen_1
endlocal&set /a "%~1=%strlength%-1"
goto :EOF

TOP

我的代码测试成功灭?

没什么要拓展的就入库了?

TOP

  1. :StrLen
  2. setlocal enableextensions
  3. set "str=a%~2"
  4. set "str=%str:"=s%"
  5. set "str=%str:^^=s%"
  6. set "str=!str:%%=s!"
  7. set /a strlength=0
  8. :StrLen_1
  9. set /a strlength+=1
  10. if not "!str:~%strlength%,1!"=="" goto StrLen_1
  11. endlocal&set /a "%~1=%strlength%-1"
  12. goto :EOF
复制代码


如果作为库函数的话,我觉得LS的代码不行,因为你不知道变量可能的长度,就把for设定在10000了,缺乏通用性

如果要完全通用的话,就要把10000改成2^31-1,就是2147483647

改完之后,执行时间就增长了。。。

TOP

:StrLen
setlocal enableextensions
set "str=%~2"
:StrLen_1
if defined str (
        set/a n+=1
        set "str=%str:~1%"
        goto StrLen_1
)
endlocal&set "%~1=%n%"
goto :EOF

函数整理成这样了,同意么?

TOP

返回列表