[AYUDA] [BATCH] Problemita con sustitución de caracteres...

Iniciado por .:Xx4NG3LxX:., 17 Febrero 2020, 23:22 PM

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

.:Xx4NG3LxX:.

Hola, tengo un problema (del cual no sé la causa) con respecto a la sustitución de caracteres. No coloco el código, porque me enoje, y lo borré, pero, era algo así...

Código (dos) [Seleccionar]

@echo off
set bloq_mayus=off
set "word=mundo"

if %bloq_mayus%==on (
set word=%word:a=A%
set word=%word:b=B%
set word=%word:c=C%
::etc...
echo %word%
pause>nul
)

echo %word%
pause>nul


Y... no sé porque no funciona...

Gracias por su atención!
"Quizá Batch no sea un lenguaje de programación, pero no obstante deja de ser útil. Asi que no anden diciendo «Que ganas de perder el tiempo»"



EdePC

Saludos,

- Las variables no se actualizan dentro de bloques For y IF, solo al finalizar el bloque las variables se actualizan. Para forzar la actualización o expansión de variables se usa SetLocal EnableDelayedExpansion y usar !variable! en lugar de %variable%, esto hasta que uses SetLocal DisableDelayedExpansion para que todo vuelva a como es por defecto.
Código (dos) [Seleccionar]

@Echo off
Set bloq_mayus=on
Set word=hola mundo cruel
If %bloq_mayus%==on (
  SetLocal EnableDelayedExpansion
  Set word=!word:a=A!
  Set word=!word:b=B!
  Set word=!word:c=C!
  Set word=!word:d=D!
  Set word=!word:e=E!
  Set word=!word:f=F!
  Set word=!word:g=G!
  Set word=!word:h=H!
  Set word=!word:i=I!
  Set word=!word:j=J!
  Set word=!word:k=K!
  Set word=!word:l=L!
  Set word=!word:m=M!
  Set word=!word:n=N!
  Set word=!word:o=O!
  Set word=!word:p=P!
  Set word=!word:q=Q!
  Set word=!word:r=R!
  Set word=!word:s=S!
  Set word=!word:t=T!
  Set word=!word:u=U!
  Set word=!word:v=V!
  Set word=!word:w=W!
  Set word=!word:x=X!
  Set word=!word:y=Y!
  Set word=!word:z=Z!
  Echo !word!
  SetLocal DisableDelayedExpansion
  Pause
)

.:Xx4NG3LxX:.

#2
 :o  :o Tan fácil era? Es enserio? Wow, muchísimas gracias... Ojala te pudiera dar algo en compensación por tu ayuda. De verdad, gracias...

Pero, tengo otro problema con la sustitución (de este si sé la causa [creo] pero no la solución)... Después la posteo, ahora me tengo que ir al Liceo xDD
"Quizá Batch no sea un lenguaje de programación, pero no obstante deja de ser útil. Asi que no anden diciendo «Que ganas de perder el tiempo»"



.:Xx4NG3LxX:.

Volví. Perdón por la ausencia...

... Bien, mi otro problema es el siguiente:

Tengo un bat y su función es cambiar cada letra por otra. Tengo una manera específica de cambiar las letras; cada letra será transformada a la letra que le antecede, es decir:

a=z ; b=a ; c=b ; y así sucesivamente.

He aqui el código de ejemplo

Código (dos) [Seleccionar]

@echo off
set word=hola
echo %word%
set word=%word:a=z%
set word=%word:b=a%
set word=%word:c=b%
set word=%word:d=c%
::etc...
echo %word%
pause>nul
goto :eof


La salida deberia ser gnkz. Pero no lo es. Sé cual es el fallo, pero no sabría explicarlo. Mi pregunta es: ¿Se puede hacer funcionar?
"Quizá Batch no sea un lenguaje de programación, pero no obstante deja de ser útil. Asi que no anden diciendo «Que ganas de perder el tiempo»"



**Aincrad**

La salida es Perfectamente "gnkz" , no hay ningun error.







.:Xx4NG3LxX:.

Cita de: **Aincrad** en 21 Febrero 2020, 01:47 AM
La salida es Perfectamente "gnkz" , no hay ningun error.

Es cierto, pero intenta con otras palabras
"Quizá Batch no sea un lenguaje de programación, pero no obstante deja de ser útil. Asi que no anden diciendo «Que ganas de perder el tiempo»"



EdePC

- Yo tampoco he tenido problemas. He estado buscando algún depurador para Bacth y veo que que "puros" no hay XD, es decir, los que he probado tienen su propio intérprete y eso es trampa, además no funcionaría igual con el intérprete del propio windows cmd.exe

- A lo sumo he hallado un software viejito: Running Steps, pero ya no está disponible en su página web, aunque se le puede descargar desde la Web Archive: https://web.archive.org/web/20121124131638if_/http://steppingsoftware.com/ssportal/downloads/Setup_RS1.exe

- Aquí unos videos de su uso: https://www.youtube.com/channel/UCxxp8jCnk5SDOrOxvRU-Few

- Es un software de pago y ya no tiene soporte XD, osea no se puede comprar. Lo veo liado para hacerle Ing. Inversa, lo revisé y está en .Net C# + ofuscación Xenocode.

- Limitación:

You are using a demo version of the product.   Execution is limited to the first 50 lines of your project. When analyzing a file, only about 30% of the messages will be displayed.  A generic message will be displayed for the other 70% of messages when errors and warnings are found in your files.  You will only be able to analyze projects and files a limited number of times per session.  The background analyzer will only display errors and warnings in the first 25 lines of code for any file.  This demo version of the product will expire in 30 days.

.:Xx4NG3LxX:.

Nahh ya hallé la solución. Era casi lo mismo que lo de EdePC
"Quizá Batch no sea un lenguaje de programación, pero no obstante deja de ser útil. Asi que no anden diciendo «Que ganas de perder el tiempo»"



**Aincrad**

Por que haces el codigo tan largo?  :huh:

Podrias meter el abecedario en una variable y recorrerla como un Array .
.-. asi el codigo seria mas corto.




.:Xx4NG3LxX:.

Cita de: **Aincrad** en 21 Febrero 2020, 03:20 AM
Por que haces el codigo tan largo?  :huh:

Podrias meter el abecedario en una variable y recorrerla como un Array .
.-. asi el codigo seria mas corto.

No sé como. Sino, lo hubiese hecho así. De hecho, lo había pensado, pero no me llegó ninguna idea de como hacerlo.
"Quizá Batch no sea un lenguaje de programación, pero no obstante deja de ser útil. Asi que no anden diciendo «Que ganas de perder el tiempo»"