Reemplazar cadena dentro de archivos de texto

Tengo un archivo que se llama config.txt en donde parte de su contenido me voy a conseguir con un conjunto de caracteres compuestos de la siguiente manera:

prueba_20140601.txt

Lo que se desea reemplazar es solo la fecha, es decir, lo que esta entre prueba_ y .txt

La cadena a cambiar la recibo por pantalla, ejemplo:

Introduzca la fecha:

20140701

Al recibir la fecha en el archivo me quedaría modificado:

prueba_20140701.txt

¿Cómo podría hacer esto?

1 Respuesta

Respuesta

Perdona que haya tardado tanto pero he visto esta consulta ahora, con la nueva forma de trabajar en todoexpertos. Parece que hiciste la pregunta por tema, sin elegir experto, y en la forma antigua de trabajar solo me llegaban las preguntas hechas expresamente.

Si no he entendido mal el archivo config.txt contiene, entre otras cosas, "literales" del tipo xxxxx_AAAAMMDD.txt donde xxxxx puede ser cualquier cosa y AAAAMMDD tiene un formato de fecha, aunque eso no habría que comprobarlo (¿o sí?). Y quieres crear un BAT que te sustituya, dentro del archivo config.txt, la parte de fecha de esos literales por otro valor que se solicita por pantalla.

¿Es así?

No sé si a estas alturas ya habrás resuelto tu problema o si habrás decidido ignorar este camino (el de todoexpertos). Por si no fuera ese el caso esta es mi propuesta:

@echo off
Setlocal EnableDelayedExpansion
del kkk.txt
set /p fecha= Introduzca la fecha:
for /f "tokens=*" %%i in (config.txt) do (set linea=&call :revisar %%i)
goto :fin
:revisar
if "%1"=="" (echo !linea!>>kkk.txt&goto :EOF)
for /f "tokens=1,2,3 delims=_." %%x in ('echo %1 ^| findstr "_"') do (
set linea=!linea!%%x_%fecha%.%%z
shift
goto :revisar
)
set linea=!linea!%1
shift
goto :revisar
)
:Fin
rem copy /y kkk.txt config.txt

Tres cosas respecto al código anterior:

1. Es muy importante que la línea "set linea=!linea!%1 " tenga un espacio al final (será el separador con los otros campos de la misma línea). El Bloc de notas respeta esos espacios antes del fin de línea pero otros editores de texto los eliminan

2. Este código suprime las líneas en blanco. Si el archivo original (config.txt) las tuviera y fuera necesario mantenerlas me lo dices y lo investigo.

3. He comentado la línea final que sería la responsable de sustituir el config.txt original por el kkk.txt construido por el BAT. Si el contenido del kkk.txt satisface tus necesidades debería quitarse el "rem" para que se "completase el trabajo".

Ya me dirás.

Acabo de ver que sobra una línea con ")", la que está entre "goto :revisar" y ":fin", aunque creo que no da error ni afecta al funcionamiento.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas