Barra de progreso [Batch]

Iniciado por Nilrac, 27 Julio 2010, 03:02 AM

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

Nilrac

Hola !

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

@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

FerJGS

Es fácil, simplemente tienes que poner la parte del código que quieres mostrar antes de cada porcentaje antes del ping.

Nilrac

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

FranciskoAsdf

#3
Te Explico un poco el uso de la barra de carga:

Por Ejemplo con un code como el siguiente funcionaria:

Código (dos) [Seleccionar]

@echo off
SetLocal EnableDelayedExpansion EnableExtensions
Echo. Hola, cargando.-
Call :BarraDeCarga
Echo.Saliendo
Pause
Exit


:BarraDeCarga
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.
Goto :Eof



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 (dos) [Seleccionar]

@echo off
SetLocal EnableDelayedExpansion EnableExtensions
Echo. Set /P "nombre=Escribe Tu nombre : "
Echo.Analizando Nombre espera....
Call :BarraDeCarga
Tu Nombre Es %nombre%.-
Echo. Set /P "apellido=Escribe Tu nombre : "
Echo.Analizando Apellido espera....
Call :BarraDeCarga
Pause
Exit


REM Aca va el codigo de la barra de carga...
:BarraDeCarga
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.
Goto :Eof


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!!!
Asdf debería ser algún tipo de función.

Nilrac

Claro como el agua amigo.

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

Gracias.

Operators


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.

_TTFH_3500

#6
CitarTengo 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.

Operators


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

Eleкtro

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):

3. Respecto a la última pregunta, aquí puedes encontrar los caracteres de bloques unicode:

Tema cerrado.

Saludos!