If defined lo que hace es preguntar si una variable está definida.
Como al principio del code tengo un set /p palabra=Ingrese texto
si le haces un enter sin escribir nada, el cmd hace:
set palabra=
y borra esa variable.
Podría emularse así también: if not "%variable%"=="" pero no queda tan bien porqué si la variable contiene un " al principio el cmd se confunde con el código, y para eso hay que escribir más
call :length %palabra: =_%
significa que le paso un parametro a :length sustituyendo los espacios por _ lo que no significa que el contenido de la variable no pueda tener espacios, pero es para que no me los elimine al pasarlo por parametro. Ejemplo:
palabra=[espacio][espacio]abc
palabra tiene 5 caracteres
y si comienza con espacio y termina con espacio se borran si llamo a una función (función trim
). Ejemplo:
call :length %palabra%
hace
call :length abc
y pasa solo abc
:length
recibe todos los parametros en variable arg y en variable word
variable word redundantemente reemplaza los espacios por _ (aunque ahora pienso que se podría borrar esa línea porque ya viene con el reemplazo desde arriba) establecemos el cont en 0, y luego vamos eliminando un carácter por ciclo repetitivo, y aumentado el cont en 1, cuando ya no queden más letras, tendremos un set word= y la borramos, cuando word ya no está definida salimos del ciclo, y establecemos una variable con el nombre del parametro.length con el contenido de cont. Ejemplo:
call :length abc
call :length __abc
set __abc.length=%cont%
Luego cuando se sale de :length pregunta
¿está definida __abc.length? si así es imprime dicha variable, esta vez ayudado por setlocal enabledelayedexpansion porque antes lo tenía así:
call echo %%%palabra: =_%.length%%
pero si el contenido de la variable comenzaba con un numero, el cmd se confundia al hacer un %1 y no imprimia bien.