我不是问问题,只是问它是如何工作的。
@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)
len
当脚本不在列表中时如何获取值nums
?len
使用以下方式调用时传递到函数中:这些函数使用以下代码片段设置它:
其中
%~2
和len
是%c%
计算的长度。