Hola, quiero buscar y cambiar una palabra de un archivo txt y estoy entranpado. Lo primero que hize es almacenar todo el contenido del archivo txt en una variable de ahi busco la palabra y la reemplazo. Este es mi codigo pero tengo 2 problemas
@echo off
setlocal enabledelayedexpansion
REM [Este es el codigo para guardar el contenido del txt en la variable contenido]
set separador=/
set contenido=
for /f "delims=" %%a in (ejemplo1.txt) do (
set linea=%%a
set contenido=!contenido!!linea!
)
REM[vemos lo que contiene la variable]
echo
echo %contenido%
pause>nul
REM[cambiamos, guardamos(en otra variable) y leemos la variable]
echo.
set /p var=ingrese la palabra a buscar:
set /p var2=ingrese la palabra reemplazante:
set sustituir=%contenido:hola=hello%
echo %sustituir%
REM[borrando el archivo]
del ejemplo1.txt
echo archivo borrado
pause>nul
REM[recreamos el archivo con el cambio de palabra]
echo %sustituir% > ejemplo1.txt
echo archivo sustituido
pause>nul
1er problema: por ejemplo tengo el archivo ejemplo1.txt con el contenido "hola mundo". En mi codigo si pongo ( set sustituir=%contenido:hola=hello%) si hace el cambio de "hola por hello", pero lo que quiero es que, yo ingrese la palabra a buscar y que yo mismo pueda poner la palabra reemplazante.
2do problema: he probado este codigo en texto mas largos(parrafos), al momento de guardar en un nuevo txt, lo guarda en una sola linea no respetando lo saltos de linea :(
Necesito de su sabiduria, muchas gracias.
Saludos,
- Usa el estilo !linea:%busca%=%reemplaza%! para evaluar variables dentro de variables.
- Sale todo junto porque lo estás poniendo junto. Puedes directamente enviar la salida a otro .txt mediante Echo que y apone un salto de línea al final.
- A mí me está funcionando lo siguiente:
@Echo Off
SetLocal EnableDelayedExpansion
Set /p busca="Ingrese la palabra a buscar: "
Set /p reemplaza="Ingresa la para reemplazante: "
If Exist ejemplo2.txt Del ejemplo2.txt
For /f "delims=" %%A In (ejemplo1.txt) Do (
Set linea=%%A
Echo !linea:%busca%=%reemplaza%!>> ejemplo2.txt
)
Pause
----
- Mmm.. GeSHi me falla con formato DOS :xD, por eso lo dejo en Bash