2017-03-16 2 views
0

Ich verwende einen FOR-Befehl und AAPT-Befehl, um einen Paketnamen aus einer Reihe von APKs in einem Verzeichnis abzurufen. Ich verwende einen separaten FOR-Befehl und einen ADB-Befehl, um alle installierten Anwendungen von Drittanbietern vom Gerät aufzulisten.Windows Batch/ADB - Überprüfen Sie installierte Anwendungen für mehrere Geräte

Ich war in der Lage, diese zu referenzieren, um die Ausgabe zu erhalten, die ich für ein einzelnes Gerät wünschen würde. Ich bin mir nicht sicher, wie ich das Skript neu anordnen kann, um mehrere Geräte zu verwalten, wenn ich Fehler erhalte.

Ich hoffe, Sie können verstehen, was ich versuche zu erreichen. Sehen Sie bitte meinen Versuch unter:

::Global 
@echo off 

set AAPT=tools\aapt.exe 
set GREP=tools\grep.exe 
set CUT=tools\cut.exe 

:: Applications 
SETLOCAL ENABLEDELAYEDEXPANSION 

FOR /F "tokens=1,2 skip=1" %%N IN ('adb devices') DO (
    SET IS_DEV=%%O 
    if "!IS_DEV!" == "device" (
     SET SERIAL=%%N 
     for /f "delims=" %%P in ('dir /b ^"APKs\*.apk^"') do (
      SET APK=%%P 
      for /f "tokens=1 delims=" %%Q in ('%AAPT% d badging APKs\!APK! ^| !GREP! "package: name=" ^| !CUT! -d' -f2') do (
       set package=%%Q 
       if "!package!" == "" set package=Unknown (
       echo !package!>>"%userprofile%\desktop\PCAPPS.txt" 
       ) 
      ) 
     ) 
    ) 
) 
FOR /F "tokens=1,2 skip=1" %%R IN ('adb devices') DO (
    if "!IS_DEV!" == "device" (
     FOR /F "tokens=1 delims=" %%U IN ('adb shell "pm list packages -3" ^| !CUT! -f 2 -d ":"^') DO (
     SET DEVPACKAGE=%%U 
     echo !DEVPACKAGE!>>"%userprofile%\desktop\DEVAPPS.txt" 
       ) 
      ) 
     ) 
    ) 
) 
FOR /f "tokens=*" %%a in ('FINDSTR /vlxg:"%userprofile%\desktop\DEVAPPS.txt" "%userprofile%\desktop\PCAPPS.txt"') DO (
    set NOTDEVAPP=%%a 
    echo !SERIAL! does not have package !NOTDEVAPP! installed 
    ) 
del "%userprofile%\desktop\DEVAPPS.txt" 
del "%userprofile%\desktop\PCAPPS.txt" 
) 
ENDLOCAL 
@pause 

Dies bezieht dich auf die Frage: Windows Batch/ADB - Check if installed .apk matches .apk from a directory

+0

Mögliche Duplikat [Windows-Batch/ADB - Überprüfen Sie, ob installiert APK APK aus einem Verzeichnis übereinstimmt] (http://stackoverflow.com/questions/42815229/windows-batch-adb-check-if- installed-apk-matches-apk-from-a-directory) – aschipfl

+0

Bitte beachten Sie den Hinweis am Ende der Frage – beecho01

Antwort

0

Die Logik war falsch. Die Verschachtelung der Funktionen funktioniert korrekt.

::Global 
@echo off 

set AAPT=tools\aapt.exe 
set GREP=tools\grep.exe 
set CUT=tools\cut.exe 

:: Applications 
SETLOCAL ENABLEDELAYEDEXPANSION 

For /f "delims=" %%P in ('dir /b ^"APKs\*.apk^"') do (
    SET APK=%%P 
    for /f "tokens=1 delims=" %%Q in ('%AAPT% d badging APKs\!APK! ^| !GREP! "package: name=" ^| !CUT! -d' -f2') do (
     set package=%%Q 
     if "!package!" == "" set package=Unknown (
      echo !package!>>"%userprofile%\desktop\PCAPPS.log" 
     ) 
    ) 
) 
FOR /F "tokens=1,2 skip=1" %%R IN ('adb devices') DO (
    SET IS_DEV=%%S 
    DEL /Q "%userprofile%\desktop\DEVAPPS.log" >nul 2>nul 
    if "!IS_DEV!" == "device" (
     SET SERIAL=%%R 
      FOR /F "tokens=1 delims=" %%U IN ('adb -s !SERIAL! shell "pm list packages -3" ^| !CUT! -f 2 -d ":"^') DO (
      SET DEVPACKAGE=%%U 
      echo !DEVPACKAGE!>>"%userprofile%\desktop\DEVAPPS.log" 
      ) 
     FOR /f "tokens=*" %%a in ('FINDSTR /vlxg:"%userprofile%\desktop\DEVAPPS.log" "%userprofile%\desktop\PCAPPS.log"') DO (
      set NOTDEVAPP=%%a 
      echo !SERIAL! - package not installed - !NOTDEVAPP!>>"%userprofile%\desktop\error.log" 
      echo !SERIAL! - !NOTDEVAPP! - not installed 
       ) 
      ) 
     ) 
    ) 
DEL "%userprofile%\desktop\PCAPPS.log" 
Verwandte Themen