Título: Como implementar barra de progreso en batch Publicado por: Baphomet2204 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
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. Título: Re: Como implementar barra de progreso en batch Publicado por: Serapis 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 Título: Re: Como implementar barra de progreso en batch Publicado por: EdePC 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: (https://i.ibb.co/qRF5d5b/batch-progress-bar.gif) -- 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 Título: Re: Como implementar barra de progreso en batch Publicado por: Baphomet2204 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 |