Windows Batch / ADB — проверьте, соответствует ли установленный .apk .apk из каталога

Я использую команду FOR и команду AAPT, чтобы получить имя пакета из нескольких APK в каталоге. Я использую отдельную команду FOR и команду ADB для вывода списка всех сторонних приложений, установленных на устройстве.

Я не уверен, как сопоставить их, чтобы получить результат, который я хотел бы. Я пытаюсь увидеть, появляется ли какое-либо содержимое команды AAPT в выводе команды ADB. Если две переменные совпадают, ничего не делайте. В противном случае, если AAPT не соответствует ни одному из выходных данных ADB, покажите имя пакета из команды AAPT для этого цикла.

Надеюсь, вы понимаете, чего я пытаюсь достичь. Пожалуйста, смотрите мою попытку ниже:

::Global
@echo off

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

:: Applications
cls
@echo.
@echo ------------------------ CHECK APPLICATIONS INSTALLED --------------------------

SETLOCAL ENABLEDELAYEDEXPANSION
@echo -- EXTRACT PACKAGENAME FROM APK --
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!
                )
            )
        )
    )
)
@echo.
@echo -- EXTRACT INSTALLED PACKAGENAME --
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!
                )
            )
        )
    )
)
@echo.
@echo -- CHECK IF ALL "DEVPACKAGE" MATCHES "PACKAGE" AND LOOP --
for /f "delims=" %%S in ('dir /b ^"APKs\*.apk^"') do (
    if "!package:*%DEVPACKAGE%=!" neq "!package!" (
    echo !package! matched
    ) else (
    echo !package! did not match
    )
)
ENDLOCAL
@pause

Вывод, который я получаю:

------------------------ CHECK APPLICATIONS INSTALLED --------------------------

-- EXTRACT PACKAGENAME FROM APK --
com.microsoft.office.lync15
com.microsoft.office.officehub
com.yammer.v1
com.teslacoilsw.launcher
yes.worldpaytotal
com.yahoo.mobile.client.android.weather

-- EXTRACT INSTALLED PACKAGENAME --
com.yahoo.mobile.client.android.weather
de.worldiety.photiety.cewe.smartphoto.de
com.estrongs.android.pop
com.yammer.v1
de.zalando.mobile
com.microsoft.office.officehub
de.kaufda.android
com.microsoft.office.lync15
com.kronos.mobile.android
com.manageengine.adssp.passwordselfservice
com.teslacoilsw.launcher
yes.worldpaytotal

-- CHECK IF ALL "DEVPACKAGE" MATCHES "PACKAGE" AND LOOP --
com.yahoo.mobile.client.android.weather did not match
com.yahoo.mobile.client.android.weather did not match
com.yahoo.mobile.client.android.weather did not match
com.yahoo.mobile.client.android.weather did not match
com.yahoo.mobile.client.android.weather did not match
com.yahoo.mobile.client.android.weather did not match
Press any key to continue . . .

Если кто-то может помочь, я был бы очень признателен!


person beecho01    schedule 15.03.2017    source источник
comment
Не поняв всего пакета, в последнем разделе вы неоднократно сравниваете if "!package:*%DEVPACKAGE%=!" neq "!package!", не присваивая этим переменным новые значения, а оставшееся содержимое из предыдущего раздела.   -  person    schedule 15.03.2017
comment
Что вы порекомендуете? вложить его в одну из других команд?   -  person beecho01    schedule 15.03.2017
comment
Я только что смог определить логическую проблему, а вам решать, какая логика вам нужна.   -  person    schedule 15.03.2017