2017-03-16 5 views
0

FORコマンドとAAPTコマンドを使用して、ディレクトリ内のいくつかのAPKからパッケージ名を取得しています。別のFORコマンドとADBコマンドを使用して、デバイスからインストールされているサードパーティ製のアプリケーションをすべて一覧表示しています。Windowsバッチ/ 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" 
関連する問題