我并不是在问问题,只是在问它是如何工作的。
@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%)
有人能解释一下其中的逻辑吗?
我将与下面的脚本进行比较,以便了解其中的逻辑。
结果是一样的
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,15
for /L %%N in (0 1 25)
答案1
len
当脚本不在列表中时,如何获取值nums
?
len
当使用以下命令调用该函数时,将其传递到函数中:
Call :$len str len
该函数使用以下代码片段进行设置:
set %~2=%c%
其中%~2
是len
,%c%
是计算的长度。