2017-03-16 49 views
0

我正在使用FOR命令和AAPT命令從目錄中的多個APK獲取軟件包名稱。我正在使用單獨的FOR命令和ADB命令來列出設備中的所有第三方安裝的應用程序。Windows Batch/ADB - 檢查多個設備的已安裝應用程序

我已經能夠交叉引用這些來獲得我想要的單個設備的輸出。我不確定如何重新排列腳本以管理多個設備,因爲我收到錯誤。

我希望你能理解我想要達到的目標。請參閱我下面的嘗試:

::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 

這涉及到這樣一個問題:Windows Batch/ADB - Check if installed .apk matches .apk from a directory

+0

的可能的複製[Windows批處理/ ADB - 檢查是否安裝apk文件從一個目錄的apk匹配](http://stackoverflow.com/questions/42815229/windows-batch-adb-check-if- installed-apk-matches-apk-from-a-directory) – aschipfl

+0

請參閱問題底部的註釋 – beecho01

回答

0

的邏輯是不正確的。嵌套功能正常工作。

::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" 
相關問題