Foro de elhacker.net

Programación => Scripting => Mensaje iniciado por: Eleкtro en 20 Marzo 2012, 12:24 pm



Título: (Solucionado) [Batch] Como reemplazar el caracter "%" dentro de una variable...?
Publicado por: Eleкtro en 20 Marzo 2012, 12:24 pm
Hola

Lo que necesito es eliminar el caracter "%".

Lo he intentado de todas las maneras que se me ha ocurrido... Escapando, Expandiendo, Usando 2 porcentages, 3, 4.. y volviendo a escapar xD...

Creo que no es posible reemplazar el caracter "%" ni el "~"

¿Alguien sabe si se puede hacer?

Código
  1. @Echo OFF
  2. Set "String=%%Special:~2,1%%"
  3. Echo Antes  :  %String%
  4. Set "String=%String:%=%"
  5. Echo Despues:  %String%

Este es el resultado que busco:

(http://img853.imageshack.us/img853/5097/prtscrcaptureyw.jpg)

Gracias...


Título: Re: (Solucionado) [Batch] Como reemplazar el caracter "%" dentro de una variable...?
Publicado por: -- KiLiaN -- en 20 Marzo 2012, 12:54 pm
Si sabes cuanto mide (en caracteres la variable) y si no alguna manera habra (se me ocurre con for) puedes probar esto:
Código:
@Echo OFF
set enabledelayedexpansion
Set "String=%%Special:~2,1%%"
Echo Antes  :  %String%
Echo Despues: %string:~1,12%
Pause >nul


Título: Re: (Solucionado) [Batch] Como reemplazar el caracter "%" dentro de una variable...?
Publicado por: Eleкtro en 20 Marzo 2012, 13:03 pm
Gracias -- KiLiaN -- Pero el método de averiguar la longitud de la variable no me serviría, más que nada porque la variable original tiene ste formato:

Código:
%Special:~2,1%%Alpha:~4,1%%Alpha:~2,1%%Alpha:~7,1%%Alpha:~14,1% %Alpha:~14,1%%Alpha:~5,1%%Alpha:~5,1%

De nada me serviría lo de la longitud jeje, Pero te lo agradezco mucho.

En lo que se refiere a documentación, No he encontrado al respecto sobre el reemplazamiento de dicho caracter.

Es obvio que con 2 caracteres incompatibles debido a que el "%" batch lo reconoce como el final de esa cadena (Variable=%Variable:%=%) (Lo que está en rojono se llega a procesar) , Y si uso el símbolo para escapar "^" batch lo reconocer como un caracter más al reemplazar.
También he pensado en escapar el scape: "^^%" Pero nada, No sirve.

Creo que mi idea de compartir con vosotros un ofuscador tendrá que esperar jejeje, O pensaré en hacerlo en Ruby xD

Un saludo!


EDITO: Ya está, Juraría que ya habia probado con 2 porcentajes pero parece que no jeje, solucionado!

Código:
setlocal enabledelayedexpansion
Set "String=!String:%%=!"


Título: Re: (Solucionado) [Batch] Como reemplazar el caracter "%" dentro de una variable...?
Publicado por: -- KiLiaN -- en 20 Marzo 2012, 13:58 pm
Y como has llegado a esa conclusion? yo tambien llevaba un rato dandole vueltas xD


Título: Re: (Solucionado) [Batch] Como reemplazar el caracter "%" dentro de una variable...?
Publicado por: Eleкtro en 20 Marzo 2012, 15:26 pm
Cual, ¿La de los 2 porcentajes?

Es el único caracter que hay que repetir obligatoriamente

Sencillamente porque es el identificador de inicio de variable, Si escribes un porcentaje, Batch espera que le siga el nombre de una variable, y otro símbolo % para cerrar la variable:

Ejemplo:
Código:
%variable%
(Ya lo sabes xD)

Además de eso, Están los subniveles donde hay que expandir los porcentajes, por ejemplo para mostrar el contenido de %Variable% habria que hacer esto:
Código
  1. Echo %%%%variable%%%%

Pero bueno, Eso ya es otro tema aparte xD que he tocado muy poco como para dar una buena explicación


Si pruebas esto verás que solo se muestra el segundo comando de Echo:

Código
  1. @echo off
  2. Echo "%"
  3. Echo "%%"

Un saludo


Título: Re: (Solucionado) [Batch] Como reemplazar el caracter "%" dentro de una variable...?
Publicado por: -- KiLiaN -- en 20 Marzo 2012, 15:30 pm
Yo me referia a esto:
Código:
Set "String=!String:%%=!"
lo del doble %% ya lo sabia y ya se que me has explicado la expansion de variables (en otro post xD) y creo que lo entendi, pero no entiendo como has llegado a esa conclusion, entiendes? xD


Título: Re: (Solucionado) [Batch] Como reemplazar el caracter "%" dentro de una variable...?
Publicado por: Eleкtro en 20 Marzo 2012, 15:38 pm
Yo me referia a esto:
Código:
Set "String=!String:%%=!"
lo del doble %% ya lo sabia

pero no entiendo como has llegado a esa conclusion, entiendes? xD

Creo que te entiendo  :P
Pues supongo que por lógica, Si usaba 4 simbolos (%String:%%=%) No iba a funcionar, Así que... tenía que expandir la variable String para poder colocar el maldito % y que lo reconociera...

Lo cierto es que probé muchas más cosas antes de eso xD ya lo dije en el primer comentario

Si te surge cualquier duda comenta

Salu2


Título: Re: (Solucionado) [Batch] Como reemplazar el caracter "%" dentro de una variable...?
Publicado por: -- KiLiaN -- en 20 Marzo 2012, 15:50 pm
No entendia la logica, a ver si así si:
Código:
Set "String=!String:%%=!"
Le cambias el valor a la variable String por si misma pero sin los % y utilizas la expansion para no tener que utilizar % en la variable porque sino no lo ejecuta entero. Con la expansion haces que cuando se ejecute el comando remplaza los % sobre el valor de String y no sobre la cadena "%String:%%=". Es esa la logica? xD Gracias por tu tiempo ;)


Título: Re: (Solucionado) [Batch] Como reemplazar el caracter "%" dentro de una variable...?
Publicado por: Eleкtro en 20 Marzo 2012, 16:16 pm
Si, Esa es la lógica :P Lo has explicado muy bien