Buenas:
El problemilla que tengo es obtener un cadena de caracteres incluida en otra.
Suponiendo que la cadena inicial es de la forma:
"Token1 Token2 Token3 ....... -- Token4 Token5 Token6 ...."
lo que pretendo es obtener en una variable la cadena "Token5 Token6 ..."
El bucle for de la forma FOR /F no me vale ya que no se la cantidad de tokens que componen la cadena inicial.
Yo lo hice así:
SETLOCAL ENABLEDELAYEDEXPANSION
@echo off&call:main %*&goto:EOF
set /A Global
:len
set var=%1
set /A c=%2
if NOT "%var%"=="" (
set var=%var:~1%
set /A c=%c%+1
)
if "%var%"=="" (
set /A Global=%c%
) else (
call:len %var% c
)
goto:eof
:mod1
set cont=
set LISTA=
FOR %%i IN (%*)DO (
set /A cont=!cont!+1
set LISTA=!LISTA! %%i
IF "%%i"=="--" (
goto:end_for
)
)
:end_for
call:len %LISTA: =% 0
set /A cont=%cont%+%Global%
set LISTA=%*
FOR /L %%i IN (1,1,%cont%) DO (call:res)
call:mod2 "%LISTA%"
goto:EOF
:res
set LISTA=%LISTA:~1%
goto:EOF
:res2
set arch=%arch:~1%
goto:EOF
:mod2
set cont2=
set arch=
FOR /F "tokens=1 delims= " %%i IN (%1) DO (
set arch=!arch!%%i
)
call:len %arch% 0
set /A cont2=1+%Global%+%cont%
set arch=%*
FOR /L %%i IN (1,1,%cont2%) DO (call:res2)
FOR %%i IN (%arch%)DO (
call:tam %%i
)
goto:EOF
:main
call:mod1 %*
pause
goto:EOF
cadena1: Token1 Token2 Token3
cadena2 Token4 Token5 Token6
cadena final Token5 Token6
@len: Cuenta las letras de una palabra recursivamente y lo almacena en Global
@mod1: Extrae la primera cadena hasta el delimitador "--" (incluido) para contar los caracteres de la cadena1 y restarselos a la cadena inicial. Llama a mod2 pasándole como argumento cadena2.
@mod2: Elimina el primer token de la cadena2 y cuenta las letras de ese 'Token4' para restarlo a la cadena2. YA TENGO LA CADENA FINAL!!
@res1 y res2: para restar letras de una cadena (con una función res bastaria....eso tengo q cambiarlo).
@main: función ppal.
Pues eso, que después de volverme loco dos semanas intentando compriender ambitos de variable, expansión de variables, paso de argumentos en funciones....etcetcetc me ha salido un churro como esto para hacer algo que en un lenguaje como c++ serían un par de lineas.
Mi pregunta es.....
¿HAY alguna función para el manejo de strings en batch que me permita hacer algo parecido con menos lineas de código?
Un saludo y Gracias por adelantado.