elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Introducción a Git (Primera Parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Scripting
| | |-+  [BATCH] Duda
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] 2 Ir Abajo Respuesta Imprimir
Autor Tema: [BATCH] Duda  (Leído 5,690 veces)
Hyakutake07

Desconectado Desconectado

Mensajes: 6


Ver Perfil
[BATCH] Duda
« en: 14 Septiembre 2013, 18:53 pm »

Buenas  todos.
Les explico mi problema dándoos las gracias de antemano.

El caso es que estoy intentando crear un código para añadir a cualquier .bat, el cual haga una función de transición de lo que se muestra en pantalla. Ejemplo:
texto = Hola
 - Lo que quiero conseguir es que se muestre lentamente cada letra (usando ping -n 1 0.0.0.0 >nul) de manera que aparezca una nueva letra cada medio segundo.

Es puramente visual pero me gustaría entender lo que he hecho mal. Aquí les dejo mi intento fracasado.


Código
  1. @echo off
  2. set x=0
  3. set t=Bienvenido
  4. call :trans
  5.  
  6. :trans
  7. cls
  8. if x==10 goto:eof else (
  9. set /a x=%x%+1
  10. set m=%t:~0,x%
  11. echo  %m%
  12. ping -n 2 0.0.0.0 >nul
  13. goto trans
  14. )

Desde luego supongo que tendré varios errores (Estoy empezando), por favor corrijanme.


« Última modificación: 17 Septiembre 2013, 04:39 am por EleKtro H@cker » En línea

Stakewinner00


Desconectado Desconectado

Mensajes: 1.426



Ver Perfil WWW
Re: [BATCH] Duda
« Respuesta #1 en: 15 Septiembre 2013, 01:02 am »

Tenia uno que hacía más o menos lo que quieres.
Es este

Código
  1. @echo off
  2. mode con cols=100
  3. mode con lines=20
  4.  
  5. call:tpwrtr julitoS.dll presenta:
  6. call:sleep 2
  7. echo.
  8. call:tpwrtr el efecto maquina de escribir ...
  9. echo.
  10. echo.
  11. call:tpwrtr OpenBSD es un sistema operativo libre tipo Unix, multiplataforma, basado en 4.4BSD.
  12. call:sleep 3
  13. echo.
  14. call:tpwrtr Es un descendiente de NetBSD, con un foco especial en la seguridad y la criptografia.
  15. echo.
  16.  
  17. pause>nul
  18. goto:eof
  19.  
  20.  
  21. :tpwrtr
  22. set palabra=%*
  23. if not defined palabra (goto:eof)
  24. set palabra=%palabra: =_%
  25. call:length %palabra%
  26. set /a contt=0
  27. :loopt
  28. call :tpwrtr1 %%palabra:~%contt%,1%%
  29. set /a contt +=1
  30. if %contt% leq %tam% (goto:loopt)
  31. goto:eof
  32. :tpwrtr1
  33. set char=%1
  34. if [%char%]==[_] (set char= )
  35. <nul (set /p msg=%char%)
  36. ping -n 1 127.0.0.0 -w 1>nul 2>&1
  37. goto:eof
  38. :length
  39. set argl=%*
  40. if not defined argl (goto :eof)
  41. set wordl=%argl%
  42. set /a contl=0
  43. :loopl
  44. if not defined wordl (goto endl)
  45. set wordl=%wordl:~1%
  46. set /a contl +=1
  47. goto loopl
  48. :endl
  49. set tam=%contl%
  50. goto :eof
  51.  
  52. :sleep
  53. if "%1"=="" (goto :eof)
  54. set /a limit=0
  55. set /a limit=%1
  56. if %limit% LEQ 0 (goto :eof)
  57. set /a cont=0
  58. :time
  59. set mirror1=%time:~-4,1%
  60. :increment
  61. set mirror2=%time:~-4,1%
  62. if not %mirror2%==%mirror1% (goto count)
  63. goto increment
  64. :count
  65. set /a cont +=1
  66. if "%cont%"=="%limit%" (goto :eof)
  67. goto time
  68. goto :eof
  69. exit
  70.  
  71.  
  72.  
  73.  
  74. @echo off
  75. color a
  76. cls
  77. echo 2
  78. PING 1.1.1.1 -n 1 -w 10>NUL
  79. cls
  80. echo 2F
  81. PING 1.1.1.1 -n 1 -w 10>NUL
  82. cls
  83. echo 2Fa
  84. PING 1.1.1.1 -n 1 -w 10>NUL
  85. cls
  86. echo 2Fac
  87. PING 1.1.1.1 -n 1 -w 10>NUL
  88. cls
  89. echo 2Fac3
  90. PING 1.1.1.1 -n 1 -w 10>NUL
  91. cls
  92. echo 2Fac3R
  93. PING 1.1.1.1 -n 1 -w 10>NUL
  94. pause>nul & exit


En línea

MeCraniDOS


Desconectado Desconectado

Mensajes: 337


Sr. Glass


Ver Perfil
Re: [BATCH] Duda
« Respuesta #2 en: 15 Septiembre 2013, 11:57 am »

Quizás si creas el tema en el subforo de scripts te ayuda mas gente.

Saludos
En línea

"La física es el sistema operativo del Universo"
     -- Steven R Garman
Hyakutake07

Desconectado Desconectado

Mensajes: 6


Ver Perfil
Re: [BATCH] Duda
« Respuesta #3 en: 16 Septiembre 2013, 21:02 pm »

Doy las gracias a Stakewinner por el código. Aunque si no fuese pedir mucho te rogaría que me explicases porque no funciona el "set m=%t:~0,x%" (Es decir, porque 
la x no actua como variable) y el tramo de tu código :tpwrtr.

Gracias a MeCraniDOS por el consejo:D
En línea

Pédrin-2

Desconectado Desconectado

Mensajes: 171



Ver Perfil
Re: [BATCH] Duda
« Respuesta #4 en: 16 Septiembre 2013, 22:14 pm »

Pido disculpas por la  intromision.
Me lo copio para poder adaptarlo a mis necesidades
Un millon de gracias  Stakewinner00

Un saludo
En línea

Pido disculpas por las pifias que pueda decir. el unico fin es ayudar y aprender.
        Un Saludo
Eleкtro
Ex-Staff
*
Desconectado Desconectado

Mensajes: 9.810



Ver Perfil
Re: [BATCH] Duda
« Respuesta #5 en: 17 Septiembre 2013, 04:54 am »

porque no funciona el "set m=%t:~0,x%" (Es decir, porque  
la x no actua como variable)

Lo primero de todo es que en ese ejemplo estás escribiendo una x literal, no una variable.

Una x:
Código:
x

Una variable:
Código:
%x%

Entonces añadiendo los caracteres que faltan, nos quedaría así la sintaxis:

Código:
%t:~0,%x%%

Pero de todas formas los caracteres "%" de inicio y fin de variable de la variable "%X%" entrarían en conflicto con los caracteres "%" de la otra variable "%T%", y esto es lo que conseguirías:

%t:~0,%x%%

Lo que he marcado en rojo es lo que Batch tomaría como la primera variable, desde el primer caracter "%" hasta el segundo "%",
lo que he resaltado en en verde se tomaría como un string,
y lo que he resaltado en amarillo es lo que se tomaría como otra variable, o en este caso como un escape del operador "%".

Como puedes entender a simple vista eso no podría funcionar jamás porque como resultado se habrán parseado mal los datos, obteniendo más datos y variables de las que en realidad tenemos.

Entonces al intentar realizar el substring (var:~0,1) y al intentar mostrar el resultado con "echo %m%", esto es lo que Batch te mostraría:
Código:
x%

El string (x) y el operador escapado % (%%), eso es lo que Batch ha podido entender.

Es por esa razón que se deben expandir las variables en tiempo de ejecución en lugar de parsearlas,
o en su defecto también podemos usar la recursividad con el comando Call para parsear las variables.

Lee acerca del comando Setlocal EnableDelayedExpansion y su utilización.

Te muestro dos alternativas funcionales:

Código
  1. @Echo OFF
  2. setlocal enabledelayedexpansion
  3. set /A "x=0"
  4. set "t=Bienvenido"
  5. set /a "x+=1"
  6. set "m=!t:~0,%x%!"
  7. echo %m%
  8. Pause&Exit

Código
  1. @Echo OFF
  2. set /A "x=0"
  3. set "t=Bienvenido"
  4. set /a "x+=1"
  5. call set "m=%%t:~0,%x%%%"
  6. echo %m%
  7. Pause&Exit

Saludos.
« Última modificación: 17 Septiembre 2013, 05:36 am por EleKtro H@cker » En línea

Hyakutake07

Desconectado Desconectado

Mensajes: 6


Ver Perfil
Re: [BATCH] Duda
« Respuesta #6 en: 17 Septiembre 2013, 19:39 pm »

Muchas gracias EleKtro H@cker! Ya probé anteriormente con el " %t:~0,%x%% " y entendí a la perfección el error (Buena explicación, gracias de nuevo).

Si me pudieses ayudar te pediría un momento para que me explicases esta linea de tu código: call set "m=%%t:~0,%x%%%"  y este evidentemente:  set "m=!t:~0,%x%!"

No se para que sirven los ("") ni tampoco los (!!). Perdona por la ignorancia :P
En línea

Eleкtro
Ex-Staff
*
Desconectado Desconectado

Mensajes: 9.810



Ver Perfil
Re: [BATCH] Duda
« Respuesta #7 en: 17 Septiembre 2013, 20:11 pm »

Cito:
Lee acerca del comando Setlocal EnableDelayedExpansion y su utilización.

Pon un poco de tu parte, Google it! :P: http://ss64.com/nt/delayedexpansion.html

La explicación del operador "!" la encontrarás en el mismo enlace de arriba, y aquí tienes más explicaciones sobre los ops que comentas:

By Elektro H@cker: Tutorial extendido de aprendizaje Batch
3.7 Memorizar


By Elektro H@cker: Tutorial extendido de aprendizaje Batch
4.8 Otros operadores


By Elektro H@cker: Tutorial extendido de aprendizaje Batch
6.3 Variables expandidas


saludos
« Última modificación: 17 Septiembre 2013, 20:12 pm por EleKtro H@cker » En línea

Hyakutake07

Desconectado Desconectado

Mensajes: 6


Ver Perfil
Re: [BATCH] Duda
« Respuesta #8 en: 18 Septiembre 2013, 17:10 pm »

Gracias de nuevo por la ayuda. No tengo apenas tiempo pero me lo leeré.
En línea

Hyakutake07

Desconectado Desconectado

Mensajes: 6


Ver Perfil
Re: [BATCH] Duda
« Respuesta #9 en: 18 Septiembre 2013, 17:27 pm »

Tus enlaces no funcionan EleKtro H@cker (Solo el primero). Esto es lo que me aparece en los 3 ultimos:

Error en la Base de Datos

Por favor intenta nuevamente. Si esta pantalla aparece nuevamente, notifica del error a un administrador.

 :o
En línea

Páginas: [1] 2 Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
duda batch
Scripting
CrÄsH 6 3,648 Último mensaje 29 Abril 2007, 13:45 pm
por nhaalclkiemr
Duda con Batch « 1 2 »
Scripting
MK-Ultra 10 5,556 Último mensaje 16 Noviembre 2007, 01:39 am
por MK-Ultra
DUDA [BATCH]
Scripting
NoryNR 1 2,018 Último mensaje 9 Febrero 2008, 23:58 pm
por NoryNR
Pequeña duda con un comando batch (NUEVA DUDA RELACIONADA)
Scripting
revenge1252 9 9,738 Último mensaje 13 Febrero 2008, 21:41 pm
por revenge1252
Duda con batch
Scripting
MK-Ultra 1 2,000 Último mensaje 23 Febrero 2008, 00:57 am
por ~[uNd3rc0d3]~
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines