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

 

 


Tema destacado: Estamos en la red social de Mastodon


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  Como implementar barra de progreso en batch
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Como implementar barra de progreso en batch  (Leído 4,522 veces)
Baphomet2204

Desconectado Desconectado

Mensajes: 56


Programo luego existo


Ver Perfil
Como implementar barra de progreso en batch
« en: 26 Julio 2019, 21:41 pm »

Buenas a todos miembros del foro, tengo un batch que funciona pero que me gustaria poner una barra de progreso, esta es la linea donde me gustaría que se mostrara la barra


Código
  1. set /p= " Respaldando base de datos, por favor espere...  " <nul  
  2. timeout /t 5 /nobreak > NUL
  3. "C:/Archivos de programa/MySQL/MySQL Server 5.6/bin/mysqldump.exe" --user=root --password=codesecret  precios > .\Backups\precios_backup_%ano%%mes%%dia%.sql
         

al estarse ejecutando esa sentencia estuviera una barra que muestre el avance ya puede llegar a tardar algo en realizarse el respaldo de mysql. Gracias de antemano.


En línea

$Diseñando_vida

while(vivas)
{
       Come();
       //Duerme();
       Programa();
       Repite();
}
Serapis
Colaborador
***
Desconectado Desconectado

Mensajes: 3.391


Ver Perfil
Re: Como implementar barra de progreso en batch
« Respuesta #1 en: 28 Julio 2019, 16:06 pm »

Busca en el foro... hace no muchos meses, salió el tema...

Sin ir más lejos, lo he encontrado rápido:
https://foro.elhacker.net/net/simulando_barra_de_progreso-t493070.0.html


En línea

EdePC
Moderador Global
***
Desconectado Desconectado

Mensajes: 2.165



Ver Perfil
Re: Como implementar barra de progreso en batch
« Respuesta #2 en: 29 Julio 2019, 02:05 am »

Saludos,

- Le he estado dando vueltas a este tema y me he topado con tres alternativas que básicamente derivan del modo en que se muestra la barra, pero la base viene a ser el iniciar una aplicación en segundo plano e ir comprobando si ya terminó su trabajo, y si no, ir haciendo otra cosa mientras tanto, como lo es el mostrar/actualizar una barra de progreso.

- Lo más sencillo me parece que es usar SET /P "=." <nul para mostrar puntos mientras que espera, otro detalle está en el tiempo de espera para mostrar los puntos, lo que recomiendo por experiencia es usar PING -n 2 para esperar un segundo solo si se espera que la aplicación va a demorar más de 30 segundos. Quitar el PING si se espera que la aplicación va a demorar 30 segundos o menos, ya que al no esperar un tiempo prudente se consumen más recursos en CPU del PC.

- El siguiente batch abre el block de notas (notepad.exe) y comprueba que el proceso notepad.exe siga en ejecución, si es así, escribe un punto cada segundo, si notepad.exe se cierra el batch termina:

Citar
@ECHO OFF
ECHO Iniciando notepad.exe
START /MIN notepad

SET "proceso=notepad.exe"
SET /p "=Esperando a que notepad.exe se cierre " <nul
:inicio
  REM Cada 1 segundo comprueba si el proceso aún está trabajando
  PING /n 2 127.0.0.1 >nul
  TASKLIST /FI "IMAGENAME eq %proceso%" | FIND "%proceso%" >nul
  IF %ERRORLEVEL% EQU 0 (
    REM Barra de progreso ...
    SET /p "=." <nul
    GOTO inicio
  )
:fin
ECHO:

ECHO Ud. ha cerrado notepad.exe
PAUSE

- Otro método que he estado viendo permite una mejor apariencia ya que es más HardCode, pero tiene la desventaja de que tiene que usar CLS para limpiar la pantalla, por lo que se perdería salida por pantalla anterior:



-- Este lo he adaptado justamente para hacer un BackUp de una base de datos MySQL que uso para hacer pruebas, en mi caso funciona así:

Citar
@ECHO OFF

SET "mysqldump=mysqldump.exe"
SET "database=dbcontrolasistenciav6"
SET "user=root"
SET "pass=123"
SET "backup=%database%_%date:~-4%%date:~-7,2%%date:~-10,2%.sql"

START /MIN CMD /C "%mysqldump% %database% --user=%user% --password=%pass% > %backup%"

SET "load="
SET "loadnum=0"
SET "myapp=mysqldump.exe"

:cargando
SET "load=%load%┃"
CLS
ECHO:
ECHO     Realizando BackUp
ECHO ┏━━━━━━━━━━━━━━━━━━━━━━━━┓
ECHO  %load%
ECHO ┗━━━━━━━━━━━━━━━━━━━━━━━━┛
SET /A "loadnum+=1"
IF %loadnum% EQU 24 SET /A "loadnum=0" & SET "load="
TASKLIST /FI "IMAGENAME eq %myapp%" | FIND "%myapp%" > NUL
rem TASKLIST | FIND "%myapp%" > NUL
IF ERRORLEVEL 1 GOTO completado
GOTO cargando

:completado
CLS
ECHO:
ECHO     BACKUP COMPLETADO
ECHO ┏━━━━━━━━━━━━━━━━━━━━━━━━┓
ECHO  ┃┃┃┃┃┃┃┃┃┃┃┃┃┃┃┃┃┃┃┃┃┃┃┃
ECHO ┗━━━━━━━━━━━━━━━━━━━━━━━━┛
ECHO:
DIR | FIND "%database%"
PAUSE

- Por último he visto que se puede utilizar la técnica del BackSpace para borrar caracteres y no tener que estar usando CLS, pero eso ya es otra historia.

- Fuentes:
https://stackoverflow.com/questions/21108380/coding-a-real-time-progress-bar-in-batch
https://ss64.org/viewtopic.php?id=1499
https://superuser.com/questions/82929/how-to-overwrite-the-same-line-in-command-output-from-batch-file

----------
Edito, GeSHi no interpreta bien los caracteres que uso para mostrar la pretty progress bar
« Última modificación: 29 Julio 2019, 02:16 am por EdePC » En línea

Baphomet2204

Desconectado Desconectado

Mensajes: 56


Programo luego existo


Ver Perfil
Re: Como implementar barra de progreso en batch
« Respuesta #3 en: 29 Julio 2019, 17:48 pm »

@ECHO OFF

SET "mysqldump=mysqldump.exe"
SET "database=dbcontrolasistenciav6"
SET "user=root"
SET "pass=123"
SET "backup=%database%_%date:~-4%%date:~-7,2%%date:~-10,2%.sql"

START /MIN CMD /C "%mysqldump% %database% --user=%user% --password=%pass% > %backup%"

SET "load="
SET "loadnum=0"
SET "myapp=mysqldump.exe"

:cargando
SET "load=%load%┃"
CLS
ECHO:
ECHO     Realizando BackUp
ECHO ┏━━━━━━━━━━━━━━━━━━━━━━━━┓
ECHO  %load%
ECHO ┗━━━━━━━━━━━━━━━━━━━━━━━━┛
SET /A "loadnum+=1"
IF %loadnum% EQU 24 SET /A "loadnum=0" & SET "load="
TASKLIST /FI "IMAGENAME eq %myapp%" | FIND "%myapp%" > NUL
rem TASKLIST | FIND "%myapp%" > NUL
IF ERRORLEVEL 1 GOTO completado
GOTO cargando

:completado
CLS
ECHO:
ECHO     BACKUP COMPLETADO
ECHO ┏━━━━━━━━━━━━━━━━━━━━━━━━┓
ECHO  ┃┃┃┃┃┃┃┃┃┃┃┃┃┃┃┃┃┃┃┃┃┃┃┃
ECHO ┗━━━━━━━━━━━━━━━━━━━━━━━━┛
ECHO:
DIR | FIND "%database%"
PAUSE

He de intentarlo con este a ver como va, gracias amigo
En línea

$Diseñando_vida

while(vivas)
{
       Come();
       //Duerme();
       Programa();
       Repite();
}
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
barra de progreso
.NET (C#, VB.NET, ASP)
DaNuK 2 4,518 Último mensaje 10 Marzo 2010, 02:05 am
por DaNuK
Barra de progreso [Batch]
Scripting
Nilrac 8 17,086 Último mensaje 13 Enero 2016, 09:13 am
por Eleкtro
[ Batch ] Barra de progreso en batch... ¿Como?
Scripting
SuperDraco 5 12,481 Último mensaje 30 Diciembre 2017, 14:26 pm
por Rubenprogrammer
Como hacer una barra de progreso al adjuntar imagen
Desarrollo Web
elpirata15hd 1 4,550 Último mensaje 7 Junio 2011, 06:34 am
por Nakp
¿Cómo conectar una barra de progreso utilizando QThread en PyQT5? [Python 3x]
Scripting
erickcasita 2 3,207 Último mensaje 16 Abril 2019, 16:12 pm
por erickcasita
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines