(Solucionado) [Batch] Como reemplazar el caracter "%" dentro de una variable...?

Iniciado por Eleкtro, 20 Marzo 2012, 12:24 PM

0 Miembros y 1 Visitante están viendo este tema.

Eleкtro

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 (dos) [Seleccionar]
@Echo OFF
Set "String=%%Special:~2,1%%"
Echo Antes  :  %String%
Set "String=%String:%=%"
Echo Despues:  %String%
Pause >nul
Exit


Este es el resultado que busco:



Gracias...








-- KiLiaN --

Si sabes cuanto mide (en caracteres la variable) y si no alguna manera habra (se me ocurre con for) puedes probar esto:
@Echo OFF
set enabledelayedexpansion
Set "String=%%Special:~2,1%%"
Echo Antes  :  %String%
Echo Despues: %string:~1,12%
Pause >nul
Entren al chat de elhacker.net
    
   

@kln13

Eleкtro

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:

%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!

setlocal enabledelayedexpansion
Set "String=!String:%%=!"








-- KiLiaN --

Y como has llegado a esa conclusion? yo tambien llevaba un rato dandole vueltas xD
Entren al chat de elhacker.net
    
   

@kln13

Eleкtro

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:
%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 (dos) [Seleccionar]
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 (dos) [Seleccionar]
@echo off
Echo "%"
Echo "%%"
pause


Un saludo








-- KiLiaN --

Yo me referia a esto: 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
Entren al chat de elhacker.net
    
   

@kln13

Eleкtro

Cita de: -- KiLiaN -- en 20 Marzo 2012, 15:30 PM
Yo me referia a esto: 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








-- KiLiaN --

No entendia la logica, a ver si así si:
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 ;)
Entren al chat de elhacker.net
    
   

@kln13

Eleкtro