Foro de elhacker.net

Programación => Scripting => Mensaje iniciado por: snpss en 26 Septiembre 2019, 03:42 am



Título: Batch buscar y modificar una palabra de un txt
Publicado por: snpss en 26 Septiembre 2019, 03:42 am
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.


Título: Re: Batch buscar y modificar una palabra de un txt
Publicado por: EdePC en 26 Septiembre 2019, 05:07 am
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:

Código
  1. @Echo Off
  2. SetLocal EnableDelayedExpansion
  3.  
  4. Set /p busca="Ingrese la palabra a buscar: "
  5. Set /p reemplaza="Ingresa la para reemplazante: "
  6.  
  7. If Exist ejemplo2.txt Del ejemplo2.txt
  8.  
  9. For /f "delims=" %%A In (ejemplo1.txt) Do (
  10.  Set linea=%%A
  11.  Echo !linea:%busca%=%reemplaza%!>> ejemplo2.txt
  12. )
  13.  
  14. Pause


----

- Mmm.. GeSHi me falla con formato DOS  :xD, por eso lo dejo en Bash