2017-02-22 45 views
2

Я изо всех сил стараюсь получить требуемый результат.Пакет Windows - проверьте, появляется ли одна переменная команды в другой командной переменной

Я использую 2 команды для получения двух переменных на устройстве, на нескольких устройствах. Я не уверен, как перекрестно ссылаться на них, чтобы получить результат, который я бы хотел. Я пытаюсь выяснить, появляется ли какое-либо содержимое DEVPACKAGE в содержимом пакетов, если они не отображаются в пакетах возвращают ошибку. Я предполагаю, что это нечто похожее на [Windows Batch: How to set the output of one command as a variable and use it in another command?, но я не вижу, как применить его к моим текущим переменным.

Я понимаю, что некоторые из моих методов могут быть грубыми. Я только серьезно изучал конструкцию пакетного файла в течение недели.

DEVPACKAGE, Package и попытался вывода, как показано ниже:

::Global 
@echo off 

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

:: Check Gold Build applications 
cls 
@echo. 
@echo ------------------------ CHECK APPLICATIONS INSTALLED -------------------------- 

SETLOCAL ENABLEDELAYEDEXPANSION 
::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 (
       ) 
      ) 
     ) 
    ) 
) 
::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" ^| !CUT! -f 2 -d ":"^') DO (
     SET DEVPACKAGE=%%U 
       ) 
      ) 
     ) 
    ) 
) 
::CHECK IF INSTALLED APPEARS IN PACKAGENAME FROM APK FOLDER 
FOR /F "tokens=1,2 skip=1" %%V IN ('adb devices') DO (
    if "!IS_DEV!" == "device" (
     for /f "delims=" %%W in ('dir /b ^"APKs\*.apk^"') do (
      IF !DEVPACKAGE! NEQ !package! (
       echo Device !SERIAL! does not have !package! installed 
       ) else (
       echo Device !SERIAL! has all APKs installed correctly 
        ) 
       ) 
      ) 
     ) 
    ) 
) 
ENDLOCAL 
@pause 

я бы переменная вывода аналогична:

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

Device <SERIAL1> does not have <APK2> installed 
Device <SERIAL3> does not have <APK1> installed 
Device <SERIAL22> does not have <APK7> installed 

Press any key to continue . . . 

Любая помощь будет высоко оценен. Заранее спасибо.

+2

В вашем коде нет VAR1 и VAR2 .... – npocmaka

+0

Я полагаю, вы хотите проверить, содержит ли 'DEVPACKAGE'' пакет'? Или наоборот? – npocmaka

+0

thats correct Я хочу проверить, появляется ли 'DEVPACKAGE' в' package' – beecho01

ответ

1

Более простой путь:

setlocal enableDelayedExpansion 
set "DEVPACKAGE_=!DEVPACKAGE:"=""!" 
echo !package!|find "!DEVPACKAGE_!" >nul 2>nul && (
    echo it is contained 
)||(
    echo it is NOT contained 
) 

Временная переменная DEVPACKAGE_ необходимо удвоить " так, если строка содержит он будет обработан корректно командой FIND.

Вы можете сделать это с CMD внутренних команд слишком:

setlocal enableDelayedExpasion 
if "%package%" equ "!package:%DEVPACKAGE%=!" (
    echo it is NOT contained 
) else (
    echo it is contained 
) 

В теории второй подход должен быть быстрее, но там больше символов, которые могли бы разорвать его.

+0

Я добавил это до конца, и он просто приносит через «НЕ СОСТОИТ». Я сделал что-то неправильно здесь, потому что не было названного '! Package!' Name? Извините, если его глупый вопрос – beecho01

+0

@ beecho01 - вам нужно использовать [замену переменной] (https://ss64.com/nt/syntax-replace.html), но не напрямую сравнивать devpackage и пакет. Если все вхождения 'devpackage' заменены в' package', а строки равны, то они не содержатся. На данный момент вы просто проверяете, равенство 'devpackage' равно' package' - попробуйте скопировать все условие. – npocmaka