2017-02-22 49 views
2

我正在努力获得所需的输出。Windows批处理 - 检查一个命令变量是否出现在另一个命令变量中

我正在使用2个命令在设备上获取2个变量,跨多个设备。我不确定如何交叉引用这些来获得我想要的输出。我试图看看DEVPACKAGE中的任何内容是否出现在包的内容中,如果它们没有出现在中会返回错误。我认为这与[Windows Batch: How to set the output of one command as a variable and use it in another command?类似,但我看不出如何将其应用于当前变量。

我明白我的一些方法可能是粗略的。我只是认真研究了一周的批处理文件构建。

DEVPACKAGEPackage并试图输出是如下:

::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'是否包含'package'?或者其他方式? – 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!”这个名字?对不起,如果它的一个愚蠢的问题 – beecho01

+0

@ beecho01 - 你需要使用[变量替换](https://ss64.com/nt/syntax-replace.html),但不直接比较devpackage和包。如果'package'中的所有'devpackage'被替换,并且字符串相等,则不包含它。目前你只是检查'devpackage'是否等于'package' - 尝试复制整个条件。 – npocmaka

相关问题