Test Foro de elhacker.net SMF 2.1

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.

@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 (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!!!
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
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.
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):

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

Tema cerrado.

Saludos!