Foro de elhacker.net

Programación => Scripting => Mensaje iniciado por: erikcatala en 4 Agosto 2016, 22:50 pm



Título: Encontrar palabra en .txt y crear variable
Publicado por: erikcatala en 4 Agosto 2016, 22:50 pm
Hola, estoy tratando de buscar una palabra en concreto en un archivo .txt con batch, exactamente ro.product.device=libra. La palabra puede cambiar pero ro.product.device= siempre es igual. Me gustaría que la palabra que cambia poder guardarla en una variable.

He probado con buscar la palabra y guardar la linea en un .txt y luego reemplazar la parte ro.product.device= por nada pero siempre me queda =libra y no puedo borrar el =.

A ver si alguien me puede ayudar porque no consigo hacer lo que quiero


Título: Re: Encontrar palabra en .txt y crear variable
Publicado por: Eleкtro en 5 Agosto 2016, 11:56 am
He probado con buscar la palabra y guardar la linea en un .txt y luego reemplazar la parte ro.product.device= por nada pero siempre me queda =libra y no puedo borrar el =.

A ver si alguien me puede ayudar porque no consigo hacer lo que quiero

Hola.

Si ya tienes una solución casi completa, entonces es mejor que muestres tu código para poder corregírtelo y que puedas eliminar el caracter "=".

Saludos!


Título: Re: Encontrar palabra en .txt y crear variable
Publicado por: erikcatala en 5 Agosto 2016, 15:42 pm
No es la mejor opción pero es la que se me ocurrió con lo que se de batch. Se podría hacer mucho mejor, pero esta es la única que se me ha ocurrido y podía hacer. El script son 2 scripts que he encontrado por internet y que he adaptado. Uno para encontrar una linea de un texto y hacer una variable y el otro para reemplazar una palabra por otra en un texto.

Código:
setlocal DisableDelayedExpansion

FINDSTR ro.product.device= 3-IMG-Folder\system\build.prop > tmp2.txt
SET /p vartmp =<tmp2.txt
 
set INTEXTFILE=tmp2.txt
 
set OUTTEXTFILE=temp.txt
set SEARCHTEXT=ro.product.device
set VER=
set OUTPUTLINE=
 
for /f "tokens=1,* delims=¶" %%A in ( '"type %INTEXTFILE%"') do (
    SET string=%%A
    setLocal EnableDelayedExpansion
    SET modified=!string:%SEARCHTEXT%=%VER%!
    echo.!modified! >> %OUTTEXTFILE%
    endlocal
 )
 
del %INTEXTFILE%
rename %OUTTEXTFILE% %INTEXTFILE%


Título: Re: Encontrar palabra en .txt y crear variable
Publicado por: Eleкtro en 5 Agosto 2016, 17:34 pm
Me gustaría que la palabra que cambia poder guardarla en una variable.

Puedes hacerlo de la siguiente manera:

Código
  1. @Echo Off
  2.  
  3. Set "srcFile=.\Textfile.txt"
  4. Set "pattern=ro.product.device="
  5. Set "value="
  6.  
  7. For /F "Tokens=2* Delims==" %%# In (
  8.    'Type "%srcFile%" ^| FindStr "%pattern%"'
  9. ) Do (
  10.    Set "value=%%#"
  11. )
  12.  
  13. Echo Valor: "%value%"
  14.  
  15. Pause&Exit /B 0

Saludos


Título: Re: Encontrar palabra en .txt y crear variable
Publicado por: erikcatala en 5 Agosto 2016, 17:41 pm
Muchas gracias, me ha funcionado  ;-)

Código:
"Tokens=2* Delims=="

Esta parte supongo que elimina = pero no acabo de entenderlo muy bien, podrías explicármelo por favor?

EDIT: Este post me ha ayudado a entenderlo un poco mejor

http://foro.elhacker.net/scripting/batchalmacenar_el_contenido_de_un_archivo_txt_en_una_variable-t201944.0.html


Título: Re: Encontrar palabra en .txt y crear variable
Publicado por: Eleкtro en 5 Agosto 2016, 18:15 pm
Código:
"Tokens=2* Delims=="

Esta parte supongo que elimina = pero no acabo de entenderlo muy bien, podrías explicármelo por favor?

No elimina nada, sino que lo separa en un token.

El parámetro "Tokens" determina la posición y la cantidad de tokens (partes) que se almacenan en las variables de For (%%a...%%z), y el parámetro "Delims" indica el caracter o caracteres delimitadores. Cuando el For encuentra dicho caracter o caracteres, se parte la frase en el siguiente token, y así sucesivamente.

En los parámetros "Tokens=2* Delims==" uso como caracter delimitador "=", e ignoro el token número 1 (lo que está a la izquierda del caracter delimitador "="), por que no es necesario leerlo.

Token 1 (o %%a): ro.product.device=
Token 2 (o %%b): valor

Saludos