Instalar varias apks en android

Espero te encuentres bien.

Tengo una duda de sobre como hacer un script, te cuento lo que hago y lo que requiero que haga, de antemano te digo que solo tengo conocimientos básicos en programación de batch

1-En un folder por ejemplo C:\apks tengo varias apks para instalar en un device las cuales casi todas tienen un nombre parecido a este

com.package_83671.apk

com.package.au_62538.apk

Y así, entonces tengo una línea de código más o menos así para instalarlas todas de un solo golpe :

for %f in "(C:\apks\*.apk, do adb install) %f

Y me funciona a la perfección, cuando ejecuta este comando me arroja detalles si la apk ha sido instalada o si ya existe o si fallo al instalarla.

Entonces la primera petición es aquí, que necesito que esta información me la proporcione en un archivo de texto (puede ser un txt) que me diga el paquete de la apk sin el guion y lo que le sigue delante por ejemplo ;

Total de apks en el folder : 14

Numero de apks instaladas : 5

Numero de apks falladas al instalar: 6

Numero de apks existentes : 3

Detalles

paquete : com.package.au

Estado : fallo o se instalo o ya existe

Y así sucesivamente.

2- Ahora para desinstalar una apk se requiere solo el nombre del paquete por ejemplo así:

Si el paquete se llama com.package.au_716279.apk

Yo tengo que usar el comando de adb para desinstalarla de la siguiente manera :

adb uninstall com.package.au

Y entonces aquí seria la segunda petición, después de poner ese comando si la apk existe en mi celular no muestra ningún mensaje, pero si no existe muestra un mensaje de que no existe, entonces requiero un bat que le quite el guion y todos los caracteres hacia la derecha para quede com.package.au para poder realizar mi línea de código

for %f in "(C:\apks\*.*, do adb uninstall) %f

Y que al igual que la primera petición me arroje un reporte de lo que hizo por ejemplo :

Total de apks en el folder : 10

Apks desistaladas : 7

apks no desistaladas ; 3

Detalles

package : com.package.au

Estado : apk desistalada

package : com.package.do

Estado : apk no existe en el celular.

A lo mejor no estas familiarizado con el adb y las apks de android, por eso espero haberme explicado bien, y si requires información adicional con gusto te la comparto.

1 Respuesta

Respuesta
1

Este ya es un pequeño proyecto pero creo que podremos abordarlo. Como primer paso te aclararé que no tengo ni idea de adb pero si se puede ejecutar desde MSDOS no creo que necesite conocerlo a fondo, bastará con conocer la sintaxis de los comandos que haya que ejecutar. Y aquí me surge la primera duda. Hablas de un "comando" MSDOS con la sintaxis:

for %f in "(C:\apks\*.apk, do adb install) %f

Esto no encaja en lo que yo sé de MSDOS. ¿No sería, más bien, algo como:

for %f in "(C:\apks\*.apk) do (adb install %f)

En relación con la otra consulta, resulta que si los nombres de los archivos tienen mas puntos (me refiero al carácter ".") que el que precede a la extensión la solución que te di no es válida.

Para empezar con algo te propongo este bat de instalación de apk's (desconozco detalles como por ejemplo como se indica el device en el que se instalan las apk's):

@echo off
del instalar.log
set contador=0
for /f "tokens=1,2 delims=_" %%a in ('dir /b *_*.apk') do (call :instalar %%a %%b)
goto :fin
:instalar
set /a contador=%contador% + 1
adb install %1_%2
echo Instalando apk %1 >> instalar.log
goto :eof
:Fin
echo Total de aplicaciones instaladas: %contador% >> instalar.log

Para poder distinguir si la instalación fue bien o mal y si fue mal por problemas del apk o porque ya estaba instalada en el device habría que saber como indica el "adb install" esas circunstancias. Desde un BAT solo se puede leer la variable de entorno ERRORLEVEL que debería registrar con un valor numérico cada una de las posibles salidas de la ejecución.

Bueno, si quieres prueba lo anterior y empezamos a avanzar.

Se me olvidó comentarte un detalle. Lo anterior asume que todos los archivos apk tienen el formato:

aaaa_bbbbb.apk

Siendo aaaa cualquier combinación de caracteres de cualquier longitud lo mismo que bbbbb. Pero tiene que haber un "_" y después de él un solo "."

Al releer la respuesta me ha parecido que no quedaba clara una cosa: cuando digo "En relación con la otra consulta..." no me refiero a la segunda parte de esta consulta sino a tu otra consulta en esta misma página, del día 25 de febrero y de asunto "Renombrar archivos con un script en .bat".

Si, eso fue lo que pensé, ayer no tuve tiempo de checarlo, hoy lo checo y te comento mis resultados

Que tal, ese código si funciono asumiendo que los archivos apks tienen el formato :

aaaa_bbbbb.apk

Pero en realidad son diversos por ejemplo :

Hay algunos que pueden tener el formato de la siguiente manera

air.uk.co.bbc.android.mediaplayer_3001003.apk

com.imo.android.imoim_582.apk

com.whatsapp_48513.apk 

Entonces el comando que me sirvió a mi no limitándome en el formatopara instalar todas estas apks fue

for %%f in (".\*.apk") do adb install %%f

¿Entonces crees que puedas mezclar el código de arriba con esta instrucción?

Y el con el código que me proporcionaste el archivo [instalar.log] no hace la función de contador, ya que adentro solo dice "Instando apk com" donde com es el nombre de como empiezan las apk

Y para la parte del archivo de texto que genera [instalar.log] te digo lo que sale en cada cosa para ver si se puede poner un error leve en cada uno como comentas por ejemplo :

Total de apks en el folder : 14 [aquí si estje claro, que cuente todas las apks en el folder]

Numero de apks instaladas : 5 [cuando se instala sin problemas la aplicación y esta no existe en el celular sale el mensaje "Success"]

Numero de apks falladas al instalar: 6 [aquí la verdad no recuerdo que mensaje sale ya que son raras las aplicaciones que no se dejan instalar]

Numero de apks existentes : 3 [cuando instalas una apk y esta existe te sale el mensaje "Failure [INSTALL_FAILED_ALREADY_EXISTS]"]

Detalles

paquete : com.package.au

Estado : fallo o se instalo o ya existe [dependiendo del error level de cada apk]

Gracias

En este caso (a diferencia del caso de tu otra consulta) ya está contemplada la posibilidad de que los nombres de los archivos apk tengan puntos intermedios además del de separación de la "extensión del archivo". Es decir que el "aaaa" del que hablaba puede ser "air.uk.co.bbc.android.mediaplayer". La única salvedad es que después del "_" solo debe haber el punto de la extensión. Es decir que debe funcionar con

Air. Uk. Co. Bbc. Android.mediaplayer_3001003. Apk

Pero no funcionará con

Air. Uk. Co. Bbc. Android.mediaplayer_3001003. Pepito. De. Apk

Aquí, como en la otra consulta, no se pueden usar comillas dobles en el comando que debe obtener la lista a la que se le aplica el IN del FOR y la sustitución que haces de "dir" por ".\" no es válida.

En cuanto al tratamiento de los mensajes de los comandos de instalación y desinstalación deberían hacerse a nivel de ERRORLEVEL. Cuando avancemos un poco te contaré como intentar obtener el valor de esa variable de entorno que corresponde a cada mensaje (te anticipo que un valor de cero significa comando correctamente ejecutado). Si no conseguimos tratarlos con ERRORLEVEL habría que capturar el mensaje en sí pero eso complicaría un poco el tratamiento.

Ya me dirás.

Para comprobar si los comandos "adb install" y "adb uninstall" modifican el valor de la variable ERRORLEVEL y que valores le asignan te sugiero que ejecutes el siguiente BAT:

@echo off
Adb install xxxxxx. Apk
Echo Este el valor del retorno: %ERRORLEVEL%

Cambiando xxxxxx.apk por el nombre de un archivo que vaya provocando sucesivamente las diferentes situaciones ("Success", "Failure [INSTALL_FAILED_ALREADY_EXISTS]", etc). De esta forma podremos averiguar si podemos trabajar con ERRORLEVEL en el resto del tratamiento y los valores concretos de cada caso. El tratamiento del ERRORLEVEL tiene sus peculiaridades que ya te comentaré si viniera al caso.

Que tal, hasta este punto te comento dos cosas

La primera es que el script

@echo off
del instalar.log
set contador=0
for /f "tokens=1,2 delims=_" %%a in ('dir /b *_*.apk') do (call :instalar %%a %%b)
goto :fin
:instalar
set /a contador=%contador% + 1
adb install %1_%2
echo Instalando apk %1 >> instalar.log
goto :eof
:Fin
Echo Total de aplicaciones instaladas: %contador% >> instalar.log

Funciona solo si la apk tiene un solo guion, pero si tiene más de un guion no encuentra la apk para instalarla, por ejemplo si tengo la apk (com.etermax.pregunt_ados.lite_65.apk) cuando ejecuto el script solo encuentra (com.etermax.pregunt_ados. Lite) por lo cual no la puede instalar porque no la encuentra con la extensión .apk

Y la segunda es :

Que creo que el comando ERRORLEVEL no nos servirá por lo siguiente :

*cuando una apk no existe en el celular muestra el error level = 0 con el mensaje "Success"
*cuando una apk ya existe en el celular muestra el error level = 0 con el mensaje "Failure [INSTALL_FAILED_ALREADY_EXIST]"
*cuando una apk se desistala del celular muestra el error level = 0 con el mensaje ="Success"

Osea que el errorlevel es lo mismo para los tres casos =(.

Saludos

Investigando un poco logre hacer unos cambios en el script para poder instarlarlas aunque tuvieran doble guion bajo

set contador=0
for /f "tokens=1,2 delims=" %%a in ('dir /b *.*') do (call :instalar %%a %%b)
goto :fin
:instalar
set /a contador=%contador% + 1
echo Installing apk [%1] [%contador% ]
echo.
adb install %1
echo [%contador%] apk name = %1 >> .instalarlog
goto :eof
:fin
echo Total de aplicaciones : [%contador%] >> instalar.log

Solo faltaria la parte del errorlevel para ir paso a paso, pero como te comente arriva no se si valla a funcionar.

Dos cosas (bueno tres):

1. El formato del FOR que te sugerí pretendía extraer el nombre de la apk además del correspondiente a la versión a instalar, es decir para una versión de nombre "com.etermax.pregunt_ados.lite_65.apk" el nombre de la apk sería

"com.etermax.pregunt_ados.lite" y el de la versión "com.etermax.pregunt_ados.lite_65.apk"

Obviamente si no se quiere extraer el nombre de la versión no hace falta establecer delimitaciones en el FOR. En cuanto a que no funcionaría si había más de un "_" en el nombre ya lo sabíamos, porque ese problema se descubrió más tarde en el otro hilo relacionado. Pero basta con adoptar a este entorno la solución obtenida en el otro hilo. Al final te pondré la versión actualizada del BAT que contempla la posibilidad de un número indefinido de "_" y se centra en el último de ellos.

2. Como te decía el manejo del ERRORLEVEL tiene sus peculiaridades que te explicaré a medida que vayan siendo necesarias. En este punto te pediría que probaras lo que te sugería en mi respuesta anterior y "exactamente" tal como te lo indicaba. La variable ERRORLEVEL recoge el valor de ejecución del último comando ejecutado, de manera que si ejecutas cualquier cosa entre el comando "adb install xxxxxxx.apk" y el "echo Este el valor del retorno: %ERRORLEVEL%" lo que saldrá ahí no es el retorno del "adb install" sino el del comando intermedio. Copia la salida del BAT tal como la veas en la ventana CMD o haz una captura de pantalla y déjame que la vea. Puede ocurrir que tengas razón y que haya que recurrir a otras formas para tratar esas salidas pero me gustaria asegurarme de que la solución más sencilla no está a nuestro alcance.

3. Este sería el BAT actualizado para número indefinido de guiones en el nombre. Como te dije lo que no puede haber son paréntesis.

@echo off
Setlocal EnableDelayedExpansion
del instalar.log
set contador=0
for /f "tokens=1,2,* delims=_" %%a in ('dir /b *_*.apk') do (call :tratar %%a %%b %%c)
goto :fin
:tratar
set c1=%1
set c2=%2
set c3=%3
if "%c3%"=="" (call :instalar %c1%_%c2% %c1% & goto :eof)
set nd=%c1%
set nt=%c2%_%c3%
:bucle
for /f "tokens=1,2,* delims=_" %%x in ("!nt!") do (
set c2=%%y
set c3=%%z
if "%c3%"=="" (call :instalar !nd!_%c2% !nd! & goto :eof)
set nt=%c3%
set nd=!nd!_%c2%
goto :bucle
)
:Instalar
set /a contador=%contador% + 1
Echo adb install %1
echo Instalando apk %2 >> instalar.log
goto :eof
:Fin
Echo Total de aplicaciones instaladas: %contador% >> instalar.log

Cuando tengamos claro el tema del ERRORLEVEL entraremos al detalle de los resultados de la instalación.

Le he estado dando alguna vuelta más al procedimiento para detectar el último guión y he llegado a uno que me parece más ajustado a las "mejores prácticas de programación" (en el sentido de que la rutina de tratamiento tiene una única salida). Esta sería la versión mejorada (correspondiente al punto 3 del mensaje anterior):

@echo off
Setlocal EnableDelayedExpansion
del instalar.log
set contador=0
for /f "tokens=1,2,* delims=_" %%a in ('dir /b *_*.apk') do (call :tratar %%a %%b %%c)
goto :fin
:tratar
set na=%1&set c2=%2&set nv=%2&set c3=%3
:bucle
if "!c3!"=="" goto :salir
set nv=!c2!_!c3!
for /f "tokens=1,2,* delims=_" %%x in ("!nv!") do (set na=!na!_%%x&set c2=%%y&set c3=%%z)
goto :bucle
:salir
call :instalar !na!_!nv! !na!
goto :eof
:instalar
set /a contador=%contador% + 1
Echo adb install %1
echo Instalando apk %2 >> instalar.log
goto :eof
:Fin
Echo Total de aplicaciones instaladas: %contador% >> instalar.log

Mejor que olvides la anterior y nos centremos en esta.

Que tal

Con respecto al nuevo script mejorado acerca del punto 3 que acabas de incluir te comento que si la apk tiene más de un guion no funciona :

El script que funciona es :

https://mega.co.nz/#!8ZhyDSzA!VOPohOC_GebjHUMkMB_VrsLUDCO74pfJtsHsh3wq8SM 

*Te anexo la foto cuando la instruccion "echo adb install %1" tiene el echo

https://mega.co.nz/#!VZgC3CAY!zwAJGKqZEGbNCU1LxJe2Y_hrW3a6OmynqM8adfx0MS8 

*y cuando no tiene el echo (para que te des una idea de la salida del script):

https://mega.co.nz/#!MEwF2RiS!zRZ6gLwJ3mmrmXntuzBcLgJf_LBmFadDvPzxH-Xu0Xc 

Te anexo imágenes del valor de errorlevel en diferentes situaciones :

1-cuando la apk no existe en el celular

https://mega.co.nz/#!ZRQWnZjJ!WGJIcoZSxP-yot7Y7YB-Fu2cJ-sLRgpoBpP1hLA85xk 

2-cuando la apk ya existe en el celular

https://mega.co.nz/#!pQpRETgA!7dqiAUpI2YoFIfDRWaYTVFezN_P3jbDCCOgotZ_kU3A 

3-cuando la apk se desistala

https://mega.co.nz/#!kAhlkaxY!ijpbud2GQ_nPjxpIolbzd824vqfHN6imjIxpa57jH9c 

Y como algo extra acerca de la pregunta anterior, como ya la cerré pero me di cuenta que el comando :

ren *. *.apk

Funciona solo si la apk contiene guiones, pero si tiene puntos no funciona, me sale

"The syntax of the command is incorrect."

Empezando por el final, efectivamente tienes razón en el comentario sobre el "ren *. *.apk". Te he contestado en la otra pregunta, supongo que te habrá llegado.

Respecto a que no te funcione correctamente el script "mejorado" no le encuentro explicación. Para descartar problemas de versión ahora estoy en un Windows 8.1, que me han regalado recientemente pero que no uso mucho porque no acabo de acostumbrarme a las "innovaciones" (que no mejoras) de esta versión. He probado en él y no le veo ningún fallo. Copio aquí todo lo que me sale por la pantalla de la ventana CMD:

C:\tmp\pba>ver

Microsoft Windows [Versión 6.3.9600]

C:\tmp\pba>type c:\tmp\kk1.bat
@echo off
Setlocal EnableDelayedExpansion
del instalar.log
set contador=0
for /f "tokens=1,2,* delims=_" %%a in ('dir /b *_*.apk') do (call :tratar %%a %%b %%c)
goto :fin
:tratar
set na=%1&set c2=%2&set nv=%2&set c3=%3
:bucle
if "!c3!"=="" goto :salir
set nv=!c2!_!c3!
for /f "tokens=1,2,* delims=_" %%x in ("!nv!") do (set na=!na!_%%x&set c2=%%y&set c3=%%z)
goto :bucle
:salir
call :instalar !na!_!nv! !na!
goto :eof
:instalar
set /a contador=%contador% + 1
Echo adb install %1
echo Instalando apk %2 >> instalar.log
goto :eof
:fin
echo Total de aplicaciones instaladas: %contador% >> instalar.log

C:\tmp\pba>dir /b *.apk
Adios.muchachos.adios_89764.apk
Con_algo.mas_Copia_2_de.Copia_de_kakita_de_la.vakita_01.apk
Copia _de_Copia_de_kakita_de_la.vakita_01.apk
Copia.de_hola.y.adios_02335625.apk
Copia_3.de_y.otra_mas.Copia_de_kakita_de_la.vakita_01.apk
Copia_Adios.muchachos.adios_89764.apk
Copia_de_kakita_de_la.vakita_01.apk
hola.y.adios_02335625.apk
kakita.de.la.vakita_01.apk
Otro.mas_0123.apk
pepito_2223344.apk
temp_00.apk

C:\tmp\pba>c:\tmp\kk1
adb install Adios.muchachos.adios_89764.apk
adb install Con_algo.mas_Copia_2_de.Copia_de_kakita_de_la.vakita_la.vakita_01.apk
adb install Copia_de_Copia_de_kakita_de_la.vakita_la.vakita_01.apk
adb install Copia.de_hola.y.adios_hola.y.adios_02335625.apk
adb install Copia_3.de_y.otra_mas.Copia_de_kakita_de_la.vakita_la.vakita_01.apk
adb install Copia_Adios.muchachos.adios_Adios.muchachos.adios_89764.apk
adb install Copia_de_kakita_de_la.vakita_la.vakita_01.apk
adb install hola.y.adios_02335625.apk
adb install kakita.de.la.vakita_01.apk
adb install Otro.mas_0123.apk
adb install pepito_2223344.apk
adb install temp_00.apk

Puedes ver la versión (comando VER), el contenido del BAT (kk1.bat), la lista de archivos con extensión apk con número variado de guiones y el resultado de la ejecución del bat. ¿Puedes hacer algo similar en tu caso y ponérmelo aquí? Supongo que sabes como copiar el texto de una ventana CMD, por si no fuera así te lo recuerdo, en el icono de la ventana (parte superior izquierda), botón derecho, Editar, Marcar. Seleccionar con el cursor en la ventana y pulsar "Enter" cuando se haya terminado la selección. Con eso el texto pasará al portapapeles y con Ctrl-V se podrá pasar al destino.

Respecto a los pantallazos, son claros el primero y el tercero, pero en el segundo no entiendo por qué no sale el mensaje del echo, después del mensaje del "Failure..." ¿Se queda colgado el BAT de ejecución del uninstall?

Por favor, repite la prueba con este bat (corrige, si fuera necesario, el path para que sea correcto):

@echo off
adb uninstall /data/local/tmp/com.aa.generaladap_tiveapps_26.apk
echo Este el valor del retorno: %ERRORLEVEL%

Si no llega a ejecutarse el comando echo, como se deduce de tu comentario, tiene que ser por qué el adb uninstall no termina de ejecutarse y eso sería un problema del "paquete" ADB que nos impediría, en cualquier caso, tratarlo desde un BAT porque no volveríamos a tener el control.

Si fuera así solo podríamos tener un informe de las apk's correctamente instaladas, aunque tal vez en el archivo instalar.log pudieran quedar reflejados los mensajes de error.

Después de probar el bat anterior repite la prueba con éste:

@echo off
adb uninstall /data/local/tmp/com.aa.generaladap_tiveapps_26.apk > nul
echo Este el valor del retorno: %ERRORLEVEL%

Hazme llegar los resultados, con foto/pantallazo si te resulta más sencillo, o con copia/pegado del texto.

Disculpa, pero he cometido dos errores,

1-El primero fue que el script mejorado si funciona, esto se debe a que a veces el adb no hace su función adecuada debido a que se colgó un proceso por por razón, basto con eliminar el proceso del adb y volver a iniciarlo.

2-Sobre lo que comentas de que el segundo pantallazo no es claro, esto se debe a que otro error mio, ya que cuando cuando hice la imagen sin querer le corte un pedazo y por eso no sale el valor del retorno, en todo caso es "0".

Entendido. Entonces queda claro que no podemos usar ERRORLEVEL.

Siguiendo, más o menos, el esquema que marcabas en el mensaje original de este hilo, he preparado el BAT que sigue para la instalación y registro de resultados:

@echo off
Setlocal EnableDelayedExpansion
del instalar.log
set ci=0&set cy=0&set cf=0
for /f "tokens=1,2,* delims=_" %%a in ('dir /b *_*.apk') do (call :tratar %%a %%b %%c)
goto :fin
:tratar
set na=%1&set c2=%2&set nv=%2&set c3=%3
:bucle
if "!c3!"=="" goto :salir
set nv=!c2!_!c3!
for /f "tokens=1,2,* delims=_" %%x in ("!nv!") do (set na=!na!_%%x&set c2=%%y&set c3=%%z)
goto :bucle
:salir
call :instalar !na!_!nv! !na!
goto :eof
:instalar
echo Paquete: %2 >> instalar.log
for /f "tokens=*" %%r in ('adb install %1') do (set result=%%r)
if "%result:~0,7%"=="Success" (set /a ci=%ci% + 1&echo Resultado: se instalo correctamente>>instalar.log&goto :eof)
if "%result:~32,6%"=="EXISTS" (set /a cy=%cy% + 1&echo Resultado: apk ya existente>>instalar.log&goto :eof)
set /a cf=%cf% + 1&echo Resultado: instalacion fallida>>instalar.log&goto :eof
:fin
echo Numero de aplicaciones instaladas:    %ci% >> instalar.log
echo Numero de aplicaciones ya existentes: %cy% >> instalar.log
echo Numero de instalaciones fallidas:     %cf% >> instalar.log
set /a ct=%ci% + %cy% + %cf%
Echo Total de aplicaciones en folder: %ct% >> instalar.log

El de desintalación sería similar pero primero comprueba si este se ajusta a tus necesidades.

Ya me dirás,

GGG

Revisando los pantallazos que me pasaste estoy casi seguro de que habrá que retocar la linea de captura del resultado de la instalación:

for /f "tokens=*" %%r in ('adb install %1') do (set result=%%r)

Para que sea

for /f "skip=2 tokens=*" %%r in ('adb install %1') do (set result=%%r)

Porque creo que la parte del resultado que nos interesa aparece en la tercera línea de la información aportada. Las capturas de CMD nunca dejan claro si el cambio de línea es consecuencia del tamaño de la ventana o estaba incluido en la salida. En todo caso creo que mientras se depura el "script" puede ser interesante poner una instrucción que nos permita ver el valor de la variable result. Algo como

echo El resultado obtenido es: /%result%/

(Las "/" las pongo para ver si hay espacios por delante o por detrás.

La verdad te luciste con ese script, me quedo exactamente a la medida, estaba viendo la manera de que si se puede anexar cuando corre el script el numero de aplicaciones en el folder y en que aplicación va de instalar, por ejemplo :

Total de aplicaciones en el folder : 5

Instalando [hola.apk 1 de 5]

Te anexo los resultados obtenidos

Imagen de la salida del cmd :

https://mega.co.nz/#!1AxkBKBD!Q6DgkTrA5vFUnCyO7mpQizqlpJBrSYGhADeTa8_tFyc 

Log que arroga el script :

https://mega.co.nz/#!ldxHjJqI!45iEzrj3VllnXEMo97vLPewvgV-N1YueV80nfZ-taoY 

Ahora solo faltaría el script de desinstalación, para lo cual eh subido imágenes a la nube de los posibles mensajes :

Desinstalación errónea :

https://mega.co.nz/#!INJQQK5J!6PWB0nAj2uXqa-OgkA9aFx5tEKlk-Np1LaFhCY7p_Fs 

Desistalacion Exitosa :

https://mega.co.nz/#!5IwzgYIK!Pyd5GQymwFthKRlmeoOgkkVIWOudFUXRPcD3mxBVmuU 

Saludos

Me alegro de que haya funcionado bien.

Respecto a lo que dices de añadir "n de ntotal" al mensaje de "Instalando" entiendo que debe salir por consola (pantalla CMD) para que sirva de control al que lanza el BAT y no grabarse en el LOG (puesto que allí debe grabarse el efecto global).

Las modificaciones a hacer serían:

Cambiar

set ci=0&set cy=0&set cf=0

por

set ci=0&set cy=0&set cf=0&set ct=0

for /f %%a in ('dir /b *_*.apk') do (set /a ct=!ct! + 1)

Añadir inmediatamente después de la etiqueta ":instalar" (creo que es la línea 17 actual) lo siguiente:

set /a ca=%ci% + %cy% + %cf% + 1
echo Instalando [%2 %ca% de !ct!]

Eliminar la penúltima línea actual, la que dice:

set /a ct=%ci% + %cy% + %cf%

Por otra parte me ha sorprendido ver, en el instalar.log cuyo enlace me has pasado, que para las dos instalaciones "fallidas" el nombre registrado en el log no es idéntico al registrado en el CMD. Se trata de com.eamobile.life_na_wf y uk. Co.focusmm.dts_theory (en el log) que aparecen en CMD como com.eamobile.life_na_wf_wf_91010559.apk y uk. Co.focusmm.dts_theory_theory_26.apk respectivamente. Si los nombres del CMD son correctos los nombres del LOG deberían haber sido com.eamobile.life_na_wf_wf y uk. Co. Focusmm.dts_theory_theory. Como parecía indicar un error en el tratamiento de la obtención de nombres, puesto que en los dos casos había varios guiones seguidos, he creado en mi entorno archivos con esos nombres y el resultado es correcto, por lo que no entiendo la diferencia (a no ser que el pantallazo del CMD y el LOG no correspondan, exactamente, a la misma prueba o que les hayas cambiado el nombre a los archivos mientras se estaba ejecutando el BAT para forzar el fallo).

Por último, respecto al BAT de desinstalación creo que sería bueno que lo crearas tú. Estas páginas de ayuda creo que hacen una mejor labor si "se enseña a pescar" que si se da el pez ya pescado. Por supuesto puedes contar con mi ayuda para depurar los errores que te surjan o para aclararte cualquier duda. En realidad el bat de desinstalación es casi idéntico a este pero los retoques que haya que hacer creo que te obligarán a entender un poco mejor el funcionamiento del BAT.

Pero no tengo problemas en crearte el BAT si este planteamiento no te parece correcto.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas