获取字符串长度 - 工作原理

获取字符串长度 - 工作原理

我并不是在问问题,只是在问它是如何工作的。

@echo off

Set str=You
Call :$len str len
set len

Set str=I You
Call :$len str len
set len

Set str=I and You
Call :$len str len
set len

Set str=I, You and Them
Call :$len str len
set len

pause& exit

:$len
setlocal EnableDelayedExpansion
set s=#!%~1!
set c=0
set nums=32 16 8 4 2 1
for %%N in (%nums%) do if not "!s:~%%N,1!"=="" set /a c+=%%N& set s=!s:~%%N!
(endlocal & set %~2=%c%)& exit /b

输出:

len=3
len=5
len=9
len=15

我还是不明白它是如何工作的。

len当脚本不在列表中时,该脚本如何获取值nums

3,5,9,15值不在set nums=32 16 8 4 2 1 for %%N in (%nums%)

有人能解释一下其中的逻辑吗?

来源:如何获取字符串的长度 - strlen.cmd


我将与下面的脚本进行比较,以便了解其中的逻辑。

结果是一样的

rem same as the script above
:$len
setlocal EnableDelayedExpansion
set s=#!%~1!
set c=0
for /L %%N in (0 1 25) do if not "!s:~%%N,1!"=="" set c=%%N
(endlocal & set %~2=%c%)& exit /b

我理解,因为从中获得的len价值3,5,9,15for /L %%N in (0 1 25)

答案1

len当脚本不在列表中时,如何获取值nums

len当使用以下命令调用该函数时,将其传递到函数中:

Call :$len str len

该函数使用以下代码片段进行设置:

set %~2=%c%

其中%~2len%c%是计算的长度。

相关内容