Foro de elhacker.net

Programación => Scripting => Mensaje iniciado por: victme en 6 Septiembre 2018, 08:22 am



Título: Modificacion variables BATCH
Publicado por: victme en 6 Septiembre 2018, 08:22 am
No encuentro la manera de remplazar el "=" dentro de una variable
otra cuestion es como le hago  para quedarme solo con un cacho de una variable
como AA="texto, 14 texto j=0.25j=025j, texto" y solo quedarme con "j=0.25" ayudaa


Título: Re: Modificacion variables BATCH
Publicado por: Eleкtro en 6 Septiembre 2018, 10:16 am
No encuentro la manera de remplazar el "=" dentro de una variable

Así sería un reemplazamiento de string normal y corriente en Batch:

Código
  1. Set "var=Hello World"
  2. Set "var=%var:Hello=Bye%"
  3.  
  4. Echo:"%var%"

Aquí tienes otros ejemplos:
  • https://ss64.com/nt/syntax-replace.html

Sin embargo, Batch es un "lenguaje de programación" muy limitado y tedioso, directamente inutil para muchas necesidades programáticas de la vida real, hasta el punto en que para llevar a cabo un simple reemplazamiento del símbolo reservado de igual (=) en una variable, necesitarás recurrir a engorrosos algoritmos basados en la iteración por tokens o caracter por caracter de dicha variable, como los que puedes encontrar a constinuación en este enlace:

  • Batch file: How to replace “=” (equal signs) and a string variable? (https://stackoverflow.com/a/51827258/1248295)

Consejo: no sigas perdiendo tu tiempo y esfuerzos en una herramienta obsoleta y engorrosa como es Batch, y utiliza cualquier otro lenguaje en su lugar. Tienes a tu disposición lenguajes como Visual Basic Script, javascript (para aplicaciones) y Powershell nativamente soportados en Windows. PowerShell es de lo mejor que puedes utilizar.



como le hago  para quedarme solo con un cacho de una variable

Aquí tienes ejemplos de substrings:

  • https://ss64.com/nt/syntax-substring.html



como AA="texto, 14 texto j=0.25j=025j, texto"

Para empezar, estás aplicando malos hábitos de programación Batch en esa declaración de variable.

El uso correcto de las comillas dobles para encerrar el valor, es así:
Código:
Set "var=value"

No así:
Código:
Set var="value"

...lo que estás haciendo así es incluir las comillas dobles como parte del valor/string. Dicho de ootra forma, el equivalente a esta declaración:

Código:
Set "var="value""



y solo quedarme con "j=0.25"

Puedes aplicar dos metodologías distintas según tus necesidades, si conoces la posición exacta del caracter de inicio y final entonces puedes aplicar un substring a esa variable, por ejemplo:

Código
  1. Set "var=text1,j=0.25,text2"
  2. set "j=%var:~6,6%"
  3.  
  4. Echo:"%j%"

Si por lo contrario desconoces las posiciones de caracteres entonces no te queda más remedio que delimitar la variable (tokenizarla) y recorrer dicha variable con un búcle por tokens:

Código
  1. Set "var=text1,j=0.25,text2"
  2. FOR /F "Tokens=2 Delims=," %%# IN ("%VAR%") DO (Set "j=%%~#")
  3. Echo:"%j%"

...eso vendría a ser lo más parecido que el inutil Batch permite llevar a cabo para reproducir una especie de operación de string split (partir una cadena de texto en una determinada cantidad de partes como resultado de un caracter delimitador).

Saludos.