gpt4 book ai didi

Windows Batch - 检查一个命令变量是否出现在另一个命令变量中

转载 作者:可可西里 更新时间:2023-11-01 10:33:10 26 4
gpt4 key购买 nike

我正在努力获得所需的输出。

我正在使用 2 个命令跨多个设备获取设备上的 2 个变量。我不确定如何交叉引用这些以获得我想要的输出。我正在尝试查看 DEVPACKAGE 的任何内容是否出现在 packages 的内容中,如果它们没有出现在 packages 中则返回一个错误。我认为它类似于 [ 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 . . .

如有任何帮助,我们将不胜感激。提前致谢。

最佳答案

更简单的方法:

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
)

理论上第二种方法应该更快,但有更多的字符可能会破坏它。

关于Windows Batch - 检查一个命令变量是否出现在另一个命令变量中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42387720/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com