首页 > 其他分享 >批处理脚本识别多安卓设备

批处理脚本识别多安卓设备

时间:2023-02-02 14:13:45浏览次数:40  
标签:set 多安卓 package 批处理 devices %% adb 识别 设备

前言

手机软件测试工作,很多时候都需要adb 连接手机执行一些操作,只连接一台手机还好,但是要连接多个手机同时执行一些操作,比如monkey,压力操作时,就比较麻烦

多设备连接的方法

目前实现多设备的连接方法有,但是操作都比较麻烦,操作方法如下:

一、手工指定设备号

1、先输入adb devices 获取设备号:

adb devices

终端窗口会显示已经连接的设备
adb devices
2、使用adb -s [设备号] xxx 指定设备进行操作

这样确实可以进行指定设备连接后,进行操作,但是比较麻烦,而且当处理事件比较多的时候,这得操作到啥时候,比如:进行5台手机logcat日志记录

二、写成批处理文件,手动填入设备号

例如:我需要获取5台设备上安装的第三方包名,那该怎么操作呢?

如下:

@echo off 
adb devices

set /p dev1="请输入设备号1:"
set /p dev2="请输入设备号2:"
set /p dev3="请输入设备号3:"
set /p dev4="请输入设备号4:"
set /p dev5="请输入设备号5:"

adb -s %devl% shell pm list package -3 >d:\package.txt
adb -s %dev2% shell pm list package -3 >>d:\package.txt
adb -s %dev3% shell pm list package -3 >>d:\package.txt
adb -s %dev4% shell pm list package -3 >>d:\package.txt
adb -s %dev5% shell pm list package -3 >>d:\package.txt
echo done
pause

实际使用会发现,代码冗余,不实用

三、自动实现设想

我们是否可以考虑,自动识别到连接到电脑的手机有多少台?然后自动分配设备号到一个变量,然后每次调用adb -s [设备号]时,自动换成对应的设备号?

1、获取连接上的设备个数

使用adb devices 可以得到每台设备的连接状态,那么就可以从返回值中获取到设备个数
例如:现在已经连接两台设备,使用adb devices读取,并输出到文本,就能得到以下文本内容:

List of devices attached
3fb371d3 device
7bd3c84d device

代码实现:

adb devices >devices.txt
 #将连接上的设备输出到一个文本
for /f "tokens=2 delims=:" %%a in ('find /c /v "" devices.txt')do set/a result=%%a 
#从文本中读取行数,并赋值给result
set /a num =%result%-1
#由于会把 List of devices attached 也存入文档中,所以行数应该-1

最后num的值就是设备的个数

2、继续从devices文档中获取设备号

当知道设备个数后,我们需要将每个设备的序列号,都取出来,设想有多少设备,就执行赋值设备多少次,可以用一个for 循环进行读取每一行的第一个字段,首次读取,需要跳过文本中的首行,也就是“List of devices attached” 这一行,而且每次读取一行后,第二次读取都需要跳过已经读取过的的那一行

设想始终是设想,时间才是检验真理的唯一标准,开始干!!

代码实现:

set /a n=1
#首先跳过第一行,设置跳过首行
for /l %%i in (1,1,%num%) do ( 
	#有多少设备就循环多少次(%num%值是上面代码取到的设备个数)
	for /f "skip=%n%" %%j in (devices.txt) do (set devices=%%j)
	echo %devices%
	#每次循环看下读取到的devices是什么
	set /a n +=1
	#每次读取后都跳过+1行
)

运行后发现,终端显示 ‘ECHO 处于关闭状态。’,这是为什么呢,我们把%%j都显示出来看看

for /l %%i in (1,1,%num%) do ( 
	for /f "skip=%n%" %%j in (devices.txt) do (
		set devices=%%j
		echo %%devices
	)
	echo %devices%
	set /a n +=1
)

终端显示:
在这里插入图片描述

这是什么鬼?这不是我们想要的结果,翻阅了很多资料,终于找到了原因所在:

批处理读取命令时是按行读取的(另外例如 for 命令等,其后用一对圆括号闭合的所有语句也当作一行),在处理之前要完成必要的预处理工作,这其中就包括对该行命令中的变量赋值。在不启用变量延迟,也不对变量动态捕获其扩展变化时,变量在预处理阶段不作改变
setlocal enabledelayedexpansion ,就是启用变量延迟,我们可以形象的认为是启用了“对变量动态捕获扩展变化”。而 ! 括起来的变量,就是要动态捕获扩展的目标变量,如果不需要,可以继续使用 % 括变量。

再尝试使用了变量延迟后的效果:
在启用变量延迟后
发现只能读取到最后一个设备的序列号,检查下,还是变量延时的问题,skip=%n%,如果不启动延时,那么n只能取到最新的一个值,需要将n也启用延时
n启用延时
skip不支持将n启用延时????,搜索了下,果然如此。。。(在此感叹批处理的鬼斧神工~~~~)

不过黄天不负有心人,还是找到了办法

使用call语句,调用返回值
done
完美得到每台设备的序列号!!

结束语

代码实际不复杂,但是可以在后续使用中增加很大的方便,我目前可以使用这套方法,同时给多个手机进行压力测试和monkey测试,更多技巧等待各路大神指教!

标签:set,多安卓,package,批处理,devices,%%,adb,识别,设备
From: https://www.cnblogs.com/deer-xiansen/p/17085791.html

相关文章

  • 识别处理器架构及位数
      图1 CPU架构及处理器类型(32/64)WattToolkit-瓦特工具箱(Steam++官网)(steampp.net)......
  • 【弯曲矫正】智能文字识别技术-弯曲矫正概述
    一、背景电子文档由于更容易存档、编辑、签名和共享,越来越多的文档需电子化,随着高质量摄像头在手机等移动设备上的普及,利用移动设备对文档进行数字化采集已经非常普遍。通......
  • 车牌识别服务-JAVA+ONNX版本,支持全类型的车牌
    1、车牌识别简介车牌识别分为车牌检测与识别,检测模型一般需要检查车牌的位置识别模型一般为识别车牌号及车牌的颜色类型等,目前有较多的深度学习模型能支持,这里就不详细......
  • 基于 keras-js 快速实现浏览器内的 CNN 手写数字识别
    https://zhuanlan.zhihu.com/p/33313340在这篇文章中,我会快速地介绍如何使用keras训练一个简单的识别MNIST(一个手写数字数据集)的CNN(卷积神经网络),并且把训练好的网络应......
  • java 识别苹果真实图片格式
    //修改后缀之后的heic图片Filefile=newFile("C:/Users/admin/Pictures/pic/IMG_2702.HEIC");Tikatika=newTika();StringmimeType=tika.detect(file);Syste......
  • OCR文字识别技术
    OCR全称是opticalcharacterrecognition,中文光学字符识别。主要技术是:把图像形状转变为文本字符。​简单来说,OCR技术就是通过图像处理和模式识别技术对光学的字符进行识别,......
  • 解决webstorm不能识别vue的@路径引用
    方式1: webstorm无法识别@符号问题[ctrl+左键无法跳转]解决:创建vue项目,打开项目后,再进入webstorm配置页面[否则没有webpack选项]ctrl+alt+s[进入设置页面]->langua......
  • 实战案例!1行Python代码识别车牌号码,轻松写一个停车场管理系统,YYDS
    大家好,这里是程序员晚枫。你家停车场的摄像头,是怎么识别出你的车牌的?今天我们一起来看一下~识别车牌识别车牌的代码很简单,只需要1行代码,如下所示。......
  • jdbc中的批处理
    本文主要讲述,面对多个sql语句【增,删,改】的执行,如何加快执行速度?传统方法:publicclassjdbcBat_{//同时处理多条数据【原始方法】@Testpublicvoidtes......
  • 模式识别笔记
    模式识别吴建鑫,南京大学目录目录模式识别目录第一章诸论1.模式识别流程2.模式识别和机器学习的区别第二章数学背景知识第三章模式识别系统的概述第四章评估1.基本评价......