2017-03-16 50 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" 
相关问题