Añadir codigo de Barra de Progreso a un BAT

Iniciado por BDJMarcelo, 26 Junio 2017, 04:35 AM

0 Miembros y 2 Visitantes están viendo este tema.

BDJMarcelo

HOLA A TODOS....

Perdón cualquier error pero soy nuevo en el foro y estoy intentando conseguir una pequeña ayuda....

Tengo el siguiente código que no es muy complicado y que realiza simplemente la instalación de los siguientes programas de 1 en 1.

CODIGO DE INSTALACIÓN
Código (dos) [Seleccionar]

@ECHO OFF
CLS
MODE CON cols=40 lines=6
COLOR 1F
ECHO  [*******************************]
ECHO     I N D I S P E N S A B L E S
ECHO  [*******************************]
ECHO.
ECHO                              32bit  
"NET_Framework_3.5.exe"
"NET_Framework_4.5.1.exe"
"NET_Framework_4.5.2.exe"
"NET_Framework_4.6.1.exe"
"Java_32.exe" /s
"VBCRedist_AIO_x86_x64.exe"
"Silverlight32.exe" /q
"AdbeRdr.exe"
"Objectdock.exe"
"Obj32bit.exe"
"DirecX2010.exe"
"FirefoxMarcadores.exe"
"Firefox32bit.exe" -ms
"Chrome32.exe"
EXIT




BARRA DE PROGRESO


echo off
color f
mode 53,5
set counter=0
set counterb=000
set core=ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
set "valuecore=                                                  "
setLocal EnableDelayedExpansion
:start
cls
echo.ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
echo.Û%valuecore:~0,50%Û
echo.ÛÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÛ
if %counter% GEQ 50 set msg=complete& set counterb=10000& goto exit
echo. %counterb:~0,-2%%%
set /a counter=counter+1
set /a counterb=counterb+200
set "valuecore=!core:~0,%counter%!                                                  "
set delay=0
:delay
if %delay%==200 goto start
set /a delay=delay+1
goto delay
:exit
echo. %counterb:~0,-2%%% %msg%
ENDLOCAL
pause >NUL


Tengo el siguiente código de "Barra de progreso" que quiero incorporar al anterior código. Esto quiere decir que que en lugar del siguiente texto:

Código (dos) [Seleccionar]

ECHO  [*******************************]
ECHO     I N D I S P E N S A B L E S
ECHO  [*******************************]
ECHO.
ECHO                              32bit  


Quiero que aparezca la siguiente "Barra de progreso".



Pero obviamente quiero que esta barra se cargue de acuerdo al progreso de la instalación de los programas.

En resumen quiero unir los dos códigos pero no se cómo poder hacerlo ya que soy novato en el asunto y les pido de favor me colaboren.

De antemano muchas gracias...


Eleкtro

#1
Esa barra de progreso es demostrativa más que rehutilizable y funcional, está muy hardcodeada (no podría ser de otra forma siendo Batch).

En esta linea se determina que la operación de "progreso" ha terminado cuando el valor de la variable counter es igual o mayor que 50.
Citar
Código (dos) [Seleccionar]
if %counter% GEQ 50 set msg=complete& set counterb=10000& goto exit

El valor de porcentage (si es que se le puede llamar así) se define en la variable counterb, no juega ningún papel real en el algoritmo, tan solo es un dato visual y hardcodeado para que llegue a 100% (o mejor dicho a 10.000) al mismo tiempo que se escriben esos 50 "Û" es decir que el valor de la variable counter llegue a 50.

Sabiendo eso, y que tienes 14 executables que quieres instalar, o dicho de ora forma 14 operaciones a realizar, pues simplemente debes calcular y adaptar el código a tus necesidades. Debes aumentar el límite de 50 a 56, y por cada una de las 14 operaciones debes sumarle un "4" al valor de la variable counter (14*4=56), de esta forma conseguirar que el "progreso" finalice en 14 ciclos.

Pero ya te digo que eso resulta muy tedioso de hacer, si quieres evitar tener que copiar 14 veces el mismo bloque de código entonces tienes que idear la forma de adaptar la ejecución de tus 14 operaciones en un For ...por ejemplo leyendo la primera linea de un archivo de texto que contenga la ruta hacia cada instalador (y posteriormente eliminar esa linea, para luego leer la siguiente linea en la siguiente iteración) ¿y que pasará cuando en vez de 14 executables tengas 13, 10 o 21?, a volver a modificar todos los valores y empezar desde cero con la adaptación...

Sinceramente, esas "barras de progreso" en Batch no vale la pena ni tan siquiera fijarse en su decoración, no veo ninguna razón lo suficientemente sostenible ni inteligente para invertir tiempo y esfuerzo en adaptar el código, amigo, tú lo que realmente necesitas es un software de creación de instaladores (o install builder) como por ejemplo InnoSetup, en el que puedes llevar a cabo la misma tarea que quieres hacer en Batch, solo que de forma eficiente, sofisticada, dinámica, segura y con un estilo visual mucho más bonito. Si lo llegas a utilizar y aceptar este consejo que te doy, me lo agradecerás, te lo aseguro. :P

Saludos!








BDJMarcelo

HOLA....

Estimado (Eleкtro)...

Te agradezco por tu respuesta y reflexión a mi solicitud para poder añadir una barra de progreso a los siguientes instaladores.

Yo necesito poder ver de alguna manera el progreso de los instaladores ya que la mayoría lo hacen de forma (Desatendida).

El utilizar el programa InnoSetup, sólo me serviría para crear 1 sólo instalador y NO múltiples y de forma normal o desatendida.

El código bat es una pequeña parte de más de 40 instaladores y que cuenta con diferentes maneras de instalar los programas, sólo lo puse cómo referencia para poder saber cómo modificarlo el más grande luego.

Simplemente me gustaría saber si me pueden colaborar en el foro a poder añadir o una barra de progreso o algún tipo de porcentaje que me indique cuanto falta para que termine dicho proceso.

Agradezco a quien me pueda colaborar.... ;)

CAPTURAS DE CODIGOS



Eleкtro

#3
Cita de: BDJMarcelo en 27 Junio 2017, 06:09 AMEl utilizar el programa InnoSetup, sólo me serviría para crear 1 sólo instalador y NO múltiples y de forma normal o desatendida.

No. Con InnoSetup (o cualquier otro install builder) puedes empaquetar los 14 executables que quieres instalar, en un solo executable/instalador, con barra de progreso. La instalación de esos 14 executables será desatendida/silenciosa/automatizada, como quieras. De hecho si lo prefieres ni siquiera tienes que empaquetar esos executables, pueden estar ubicados en cualquier directorio (de la misma manera que lo están cuando los quieres ejecutar con un batch-script). Como ya dije, sirviría para llevar a cabo la misma tarea que pretendes realizar en Batch, y no solo me refiero al procedimeinto de instalación de cada executable/instalador por individual de forma automatizada, sino también a la creación de una interfáz de usuario o menú donde elegir el tipo de instalación, y etc.

Cita de: BDJMarcelo en 27 Junio 2017, 06:09 AM
Simplemente me gustaría saber si me pueden colaborar en el foro a poder añadir o una barra de progreso o algún tipo de porcentaje que me indique cuanto falta para que termine dicho proceso.

Batch es un "lenguaje de programación" muy limitado el cual no ha sido pensado para ese tipo de tareas, cualquier cosa se vuelve compleja de realizar precisamente por su escasez, ya que no provee miembros built-in para ciertas tareas ni mucho menos componentes de interfaces gráficas. Si realmente quieres optar por la programación, entonces deberías considerar la idea de deshechar Batch y empezar a utilizar un lenguaje capacitado para esa tarea, un lenguaje de verdad, preferiblemente un lenguaje que posea un framework con un componente de progressbar/barra de progreso que te permita desarrollar de forma sencilla una GUI; unos ejemplos serían: C#, Java o VB.NET.

Pero es que de todas formas a la pregunta que formulaste ya se te explicó la solución, se te explicó cual es el valor que modificar y como podrías implementar la funcionalidad que deseas, ¿qué más dudas tienes con respecto a eso?... ¿lo has intentando hacer por ti mismo?.

PD: Aunque no te lo parezca, la opción de utilizar un install builder es la más apropiada en estas circunstancias, precisamente por que es un software ideado específicamente para cumplir esa funcionalidad, la de proveer un procedimiento sofisticado (y personalizable) de instalación.

Saludos








gado2612

Jejeje creo que es un poquito tarde para responder XD pero no lograba recuperar mi contraseña del foro XD...

Se me ocurrio esta forma sencilla, aunque sin barra de progreso pero como tu dijistes:

Cita de: BDJMarcelo link=topic=471562.msg2130505#msg2130505
b]Simplemente me gustaría saber si me pueden colaborar en el foro a poder añadir o una barra de progreso o algún tipo de porcentaje que me indique cuanto falta para que termine dicho proceso.
[/b]

"O algun tipo de porcentaje que me indique cuanto falta" bueno si quieres algo que te indique cuanto falta pues esta es una manera:
Código (bash) [Seleccionar]

:: By gado2612 [elhacker.net]
@echo off
color 17
title Ejemplo elhacker.net
echo Instalador automatico...
echo.
echo Desea comenzar? (s/n)
:opcion
set /p respuesta=:
if "%respuesta%" == "s" goto comenzar
if "%respuesta%" == "n" goto cancelar
echo Esta opcion "%respuesta%" es incorrecta...
echo Solo se admiten como opciones la "s" y "n" en minusculas...
echo Intentalo de nuevo...
goto opcion
:comenzar
echo.
echo Instalando Programa1 (Falta un programa)
start programa1.exe /wait
echo Instalando Programa2 (No falta ninguno xD)
start programa2.exe /wait
echo Y asi sucesivamente...
pause
:cancelar
exit

pues solo lo hago por ayudar, me gusta ayudar, pero eso es lo que se me ocurrio, si no te parece bien pues utiliza lo que te dijo el amigo elcktro XD
Si no tienes nada bueno que decir, mejor mantén la boca cerrada...

BDJMarcelo

HOLA.....

( gado2612 )

Muchas gracias por tu aporte, lo voy a probar a ver que tal....

  ;-)   ;-)