Ayuda extrayendo subcadena desde .bat

Quería plantearte una pregunta: estoy programando un .bat y necesito extraer una cadena en concreto de un fichero .txt para poder almacenarla en una variable. Dicha cadena comienza siempre por los caracteres 'hor'. Supongo que es una tontería pero llevo ya un rato buscando información y no encuentro nada! :(

1 Respuesta

Respuesta
1
Entiendo que quieres extraer toda la cadena que empieza por "hor" hasta el siguiente espacio.
Seguramente hay formas más elegantes de hacerlo pero así de pronto se me ocurre lo siguiente:
@echo off
for /f "tokens=*" %%i in ('find "hor" fichero.txt ^| find "hor"') do (call :mirar %%i)
goto :fin
:mirar
set cadena=%1
set c=%cadena:~0,3%
if "%c%" == "hor" goto :EOF
shift
goto :mirar
:Fin
Echo Encontrada %cadena%
En casa tengo ejemplos más elaborados y esta tarde veré si encuentro algo más "fino".
Saludos,
GGG
No he visto gran cosa para mejorarlo. Solo usar el comando FINDSTR en lugar del FIND. Quedaría:
@echo off
for /f "tokens=*" %%i in ('findstr "hor" fichero.txt') do (call :mirar %%i)
goto :fin
:mirar
set cadena=%1
set c=%cadena:~0,3%
if "%c%" == "hor" goto :EOF
shift
goto :mirar
:Fin
Echo Encontrada %cadena%
Dime si te vale así o si quieres alguna mejora.
Saludos,
GGG
Hola experto,
siento haber tardado en contestar pero no he podido acceder antes! Creo que la idea debe ser esta pero hay un problema. Al ejecutarse el for, en 'call :mirar' no se le esta pasando el valor de 'i' y no se muy bien por qué.
Por lo que he podido investigar desde luego no hay mucha más variedad para dar una posible solución. No tengo mucha práctica aún creando .bat y si pudieses orientar, e un poco en cual puede ser el problema te lo agradecería.
Muchas gracias de antemano,
Un saludo
A mí si que me funciona. Y, en todo caso, tiene que funcionar una vez que averigüemos que está pasando. Quiero decir que no hay por qué buscar otra solución hasta conseguir que esta funcione. ¿Dices qué dentro de la rutina "mirar" no se recibe nada? Prueba a poner un "echo %1" nada más entrar a ver que te sale. Así:
@echo off
for /f "tokens=*" %%i in ('findstr "hor" fichero.txt') do (call :mirar %%i)
goto :fin
:mirar
echo %1
set cadena=%1
set c=%cadena:~0,3%
if "%c%" == "hor" goto :EOF
shift
goto :mirar
:Fin
Echo Encontrada %cadena%
Imagino que en lugar de "fichero.txt" habrás puesto el nombre del fichero que contiene la cadena que empieza por "hor" y que ese fichero está en la misma carpeta que el BAT (o, en caso contrario, que has incluido el path del fichero en el comando "findstr").
No te preocupes que acabará funcionando, pero tienes que irme diciendo que es lo que haces y que resultado te da.
Saludos,
GGG

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas