Foro de elhacker.net

Programación => Scripting => Mensaje iniciado por: Nilrac en 27 Julio 2010, 03:02 am



Título: Barra de progreso [Batch]
Publicado por: Nilrac en 27 Julio 2010, 03:02 am
Hola !

Encontre este code que me parece excelente para una barra de progreso en batch.

Código:
@echo off

SetLocal EnableDelayedExpansion EnableExtensions
Echo.
Echo. Loading...
Echo.
Set "bar="
Set "percent=0"
Set "count=0"
For /L %%I In (1,1,20) Do (Set "bar=!bar!±")
:Loop
Set /P "= %bar:~0,20% %percent%%%"<Nul
REM en esta linea seteo la variable asdf = al primero numero del comando random (cualquier numero del 1 al 9)
Set "asdf=%Random:~0,1%"
If %asdf% GEQ 8 (
REM acá si la variable asdf es mayor o igual a 8 le resto 4 para que el ping no pase de 5 y así no hace tan larga la carga
Set /A "asdf=asdf-4"
)
REM y acá solo cambio los ping 5 por el lo que contenga la variable asdf
Ping -n %asdf:~0,1% -w %asdf:~0,1% LocalHost>nul
For /L %%I In (1,1,26) Do Set /p "="<Nul
Set "bar=Û%bar%"
Set /a "count+=1"
Set /a "percent+=5"
If %count% LEQ 20 Goto:Loop
Echo.
Echo.
Echo. Done.
Pause>Nul 2>&1
Exit

Lo unico es que no entiendo, es como colocar mi codigo y que acabe al par de la barra de progreso

Gracias


Título: Re: Barra de progreso [Batch]
Publicado por: FerJGS en 27 Julio 2010, 15:09 pm
Es fácil, simplemente tienes que poner la parte del código que quieres mostrar antes de cada porcentaje antes del ping.


Título: Re: Barra de progreso [Batch]
Publicado por: Nilrac en 27 Julio 2010, 17:33 pm
Pues como lo dices no me funciona  :o, Al principio marca la barra y el 0% pero no avanza , mas sin embargo, el codigo si funciona


Título: Re: Barra de progreso [Batch]
Publicado por: FranciskoAsdf en 27 Julio 2010, 18:19 pm
Te Explico un poco el uso de la barra de carga:

Por Ejemplo con un code como el siguiente funcionaria:

Código
  1. @echo off
  2. SetLocal EnableDelayedExpansion EnableExtensions
  3. Echo. Hola, cargando.-
  4. Call :BarraDeCarga
  5. Echo.Saliendo
  6.  
  7.  
  8. :BarraDeCarga
  9. Echo. Loading...
  10. Set "bar="
  11. Set "percent=0"
  12. Set "count=0"
  13. For /L %%I In (1,1,20) Do (Set "bar=!bar!±")
  14. :Loop
  15. Set /P "= %bar:~0,20% %percent%%%"<Nul
  16. REM en esta linea seteo la variable asdf = al primero numero del comando random (cualquier numero del 1 al 9)
  17. Set "asdf=%Random:~0,1%"
  18. If %asdf% GEQ 8 (
  19. REM acá si la variable asdf es mayor o igual a 8 le resto 4 para que el ping no pase de 5 y así no hace tan larga la carga
  20. Set /A "asdf=asdf-4"
  21. )
  22. REM y acá solo cambio los ping 5 por el lo que contenga la variable asdf
  23. Ping -n %asdf:~0,1% -w %asdf:~0,1% LocalHost>nul
  24. For /L %%I In (1,1,26) Do Set /p "="<Nul
  25. Set "bar=Û%bar%"
  26. Set /a "count+=1"
  27. Set /a "percent+=5"
  28. If %count% LEQ 20 Goto:Loop
  29. Goto :Eof
  30.  
  31.  

Ahora:

El texto "SetLocal EnableDelayedExpansion EnableExtensions", debes colocarlo al principio de TU codigo, despues de @Echo Off.-

Le Colocas una etiqueta a la funcion (la barra de carga) o puedes dejarlo como esta en el ejemplo (supongo que sabes lo que es una etiqueta xD).-

La etiqueta y todo lo que esta debajo de la etiqueta :BarraDeCarga hasta Goto:Eof colocalo al final de tu codigo para que no te moleste.-

Despues la puedes ir llamando cada vez que quieras por ejemplo:

Código
  1. @echo off
  2. SetLocal EnableDelayedExpansion EnableExtensions
  3. Echo. Set /P "nombre=Escribe Tu nombre : "
  4. Echo.Analizando Nombre espera....
  5. Call :BarraDeCarga
  6. Tu Nombre Es %nombre%.-
  7. Echo. Set /P "apellido=Escribe Tu nombre : "
  8. Echo.Analizando Apellido espera....
  9. Call :BarraDeCarga
  10.  
  11.  
  12. REM Aca va el codigo de la barra de carga...
  13. :BarraDeCarga
  14. Echo. Loading...
  15. Set "bar="
  16. Set "percent=0"
  17. Set "count=0"
  18. For /L %%I In (1,1,20) Do (Set "bar=!bar!±")
  19. :Loop
  20. Set /P "= %bar:~0,20% %percent%%%"<Nul
  21. REM en esta linea seteo la variable asdf = al primero numero del comando random (cualquier numero del 1 al 9)
  22. Set "asdf=%Random:~0,1%"
  23. If %asdf% GEQ 8 (
  24. REM acá si la variable asdf es mayor o igual a 8 le resto 4 para que el ping no pase de 5 y así no hace tan larga la carga
  25. Set /A "asdf=asdf-4"
  26. )
  27. REM y acá solo cambio los ping 5 por el lo que contenga la variable asdf
  28. Ping -n %asdf:~0,1% -w %asdf:~0,1% LocalHost>nul
  29. For /L %%I In (1,1,26) Do Set /p "="<Nul
  30. Set "bar=Û%bar%"
  31. Set /a "count+=1"
  32. Set /a "percent+=5"
  33. If %count% LEQ 20 Goto:Loop
  34. Echo. Done.
  35. Goto :Eof
  36.  

Y así, se entiende verdad xDDDD?!, no es necesario que coloques todo el codigo cada vez que lo quieras usar, solo basta con llamarlo cada vez que lo necesites =).-


Bueno espero que sí, cualquier duda consultas :D!!!


Título: Re: Barra de progreso [Batch]
Publicado por: Nilrac en 27 Julio 2010, 18:34 pm
Claro como el agua amigo.

Creí que se usaba de forma global en todo el code.

Gracias.


Título: Re: Barra de progreso [Batch]
Publicado por: Operators en 11 Enero 2016, 02:13 am

Muy Buenas Noches

Tengo una duda del código mostrado en la siguiente linea:

For /L %%I In (1,1,26) Do Set /p "="<Nul

Luego del Igual ( = )  y antes de la segunda comillas doble ( " ), existe un signo que desconozco, este se ve mejor cuando se copia esa linea en bloc de notas, si me podrían explicar su función y como sacarlo por favor,

Muchas Gracias de Antemano,

Nota: El resto del código esta excelente, un gran ejemplo que al menos a mi no se me hubiese ocurrido, gracias por el aporte.


Título: Re: Barra de progreso [Batch]
Publicado por: _TTFH_3500 en 12 Enero 2016, 14:06 pm
Citar
Tengo una duda del código mostrado en la siguiente linea:

For /L %%I In (1,1,26) Do Set /p "="<Nul

Luego del Igual ( = )  y antes de la segunda comillas doble ( " ), existe un signo que desconozco, este se ve mejor cuando se copia esa linea en bloc de notas, si me podrían explicar su función y como sacarlo por favor


¿Te refieres al circulo blanco dentro de un rectángulo vertical negro?, ese es el carácter de retroceso:
Binario      Decimal  Hex  Abreviatura  Repr  AT        Nombre
0000 1000     8       08       BS           ␈   ^H   Retroceso/Backspace

Es decir la tecla '<--' que esta encima de 'ENTER', en este caso sirve para que se muestre en solo una linea la barra de carga, sino se vería así:

 Loading...

▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒ 0%█▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒ 5%██▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒ 10%███▒▒▒▒▒▒▒
▒▒▒▒▒▒▒▒▒▒ 15%████▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒ 20%

En lugar de así:

 Loading...

██▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒ 10%


Edito: puede que me equivoque porque en teoría al presionar Alt+8 ◘ debería aparecer el mismo carácter, pero en Notepad++ aparece con el icono de |BS|, ahora bien la funcionalidad si es esa.


Título: Re: Barra de progreso [Batch]
Publicado por: Operators en 13 Enero 2016, 02:09 am

Hola,

Muchisimas gracias por responder, ahora me queda mas claro, no me salio el símbolo en bloc de notas pero si en Notepad++, lo único que ahora me quedo con la duda si habrá un lugar o manual donde expliquen estos símbolos porque no los conocía, y en los lugares donde he leído ( inclusive en el foro ) no me había topado con ellos, o lo mejor no he buscado muy bien en el foro.

Te agradezco nuevamente por compartir de tus conocimientos y apoyo, he aprendido varias cosas que he aplicado en mi trabajo y me ha ido bien.  :D


Título: Re: Barra de progreso [Batch]
Publicado por: Eleкtro en 13 Enero 2016, 09:13 am
1. Está prohibido revivir posts antiguos, puedes publicar una nuevo post para formular tus preguntas si lo deseas y poner enlaces a este u otros hilos para referencias su contenido...

2. Respecto a la primera pregunta que hiciste, es el caracter del backspace (BS):
  • http://www.aivosto.com/vbtips/control-characters.html

3. Respecto a la última pregunta, aquí puedes encontrar los caracteres de bloques unicode:
  • https://en.wikipedia.org/wiki/Block_Elements
  • http://www.alanwood.net/unicode/block_elements.html

Tema cerrado.

Saludos!