Não estou perguntando sobre um problema, apenas sobre como ele funciona.
@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
Saída:
len=3
len=5
len=9
len=15
Ainda não consigo entender como funciona.
Como o script pode obter len
valor quando não está na nums
lista?
3,5,9,15
valor não emset nums=32 16 8 4 2 1
for %%N in (%nums%)
Alguém pode explicar a lógica?
Fonte: Como fazer: Obtenha o comprimento de uma String - strlen.cmd
Vou comparar com o script abaixo que consigo entender a lógica.
O resultado é o mesmo
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
Eu entendi porque len
o valor 3,5,9,15
obtido defor /L %%N in (0 1 25)
Como o script pode obter
len
valor quando não está nanums
lista?len
é passado para a função quando ela é chamada usando:As funções definem isso usando este trecho de código:
onde
%~2
estálen
e%c%
é o comprimento calculado.