和安卓系统打交道,难免用到adb命令;和很多安卓硬件打交道,就要大量用到adb命令,如果一个一个写就太累了,在windows系统下还是借助批处理吧。

adb命令基础

首先需要准备的一些adb命令:

  • 查看当前连接的安卓设备
adb devices
  • 连接某个远程安卓设备
adb connect [host]:5555
  • 为某安卓设备安装某个应用
adb -s [device] install -r -t [app_file_path]
  • 为某安卓设备卸载某个应用
adb -s [device] uninstall [app_package_name]
  • 为某安卓设备启动某个应用
adb -s [device] shell am start -n [app_component_name]
  • 为某安卓设备停止某个应用
adb -s [device] shell am force-stop [app_package_name]
  • 为某安卓设备清除某应用数据
adb -s [device] shell pm clear [app_package_name]
名目 含义
[host] 代表局域网内的IP,如192.168.1.101
[device] 代表设备的识别码,真机或模拟器会是设备的IEM或mac,远程设备会是192.168.1.101:5555形式
[app_file_path] apk文件所在路径,如C:/test.apk
[app_package_name] 应用的包名,某种意义上说也是applicationId,如com.example.testapp
[app_component_name] 应用的launcher,一般为com.example.testapp/com.example.testapp.MainActivity形式,即【包名/launcher类名】形式,包名与applicationId相同时,可省略,写成com.example.testapp/.MainActivity

bat批处理基础

这一部分算是了解windows的DOS命令,以上的adb命令算是外来的,windows内置了一些比较有用的命令,利用他们可以如编程一样写出一个脚本用以处理逻辑:

dos命令 含义
echo 打印,相当于其他语言中的print
@ 不显示当前命令行,通常与echo一起使用
goto 跳转,一般为标签(方法函数)一起使用,标签需用:表示,如goto add
rem 表示注释
pause 暂停,会等待用户并显示“按任意键后继续”
for 循环,语法类似于python、kotlin等,如 for i in (…)
if 判断条件,语法与其他编程语言相似
set 赋值,可用于变量常量赋值
% 引用,set /a num=9,那么%num%就是9了,%也可用于for循环中表示循环变量
ping 检测是否连接,如ping -n 1 -w 10表示检测1次等待超时时间为10ms

可以使用 [keyword] /?方法查看某个内置dos命令的语法,如想知道ping的用法就使用ping /?。

批处理语法较为粗糙,都比较好理解,主要理解if和for的用法就行。
if命令使用if /?可以得到相关语法解释:

IF [NOT] ERRORLEVEL number command
IF [NOT] string1==string2 command
IF [NOT] EXIST filename commandNOT               指定只有条件为 false 的情况下,Windows 才应该执行该命令。ERRORLEVEL number 如果最后运行的程序返回一个等于或大于指定数字的退出代码,指定条件为 true。string1==string2  如果指定的文字字符串匹配,指定条件为 true。EXIST filename    如果指定的文件名存在,指定条件为 true。command           如果符合条件,指定要执行的命令。如果指定的条件为 FALSE,命令后可跟 ELSE 命令,该命令将在 ELSE 关键字之后执行该命令。ELSE 子句必须出现在同一行上的 IF 之后

这里只截取了一部分,大致可以看到有三种用法,
第一种可用于判断在此之前的一行dos命令是否得到了正确的结果,比如:

@echo off
ping www.baidu.com -n 1 -w 10
IF ERRORLEVEL 0 (@echo baidu is available) ELSE (@echo baidu is unavailable)
pause

第二种和其他编程语言中的==或equals类似,比如:

@echo off
set a="9"
IF %a% == "9" (@echo success)
pause

第三种就是判断文件是否存在的,不多说。

for命令同样可以使用for /?查看帮助,这里用到的有两种:
第一种,数字的遍历:

FOR /L %variable IN (start,step,end) DO command [command-parameters]

例如:

FOR /L %%i in (1,2,10) DO (echo %%i)

输出:

1
3
5
7
9

第二种,读字符集合,包括文件/字符/某命令返回的结果:

FOR /F ["options"] %variable IN (file-set) DO command [command-parameters]
FOR /F ["options"] %variable IN ("string") DO command [command-parameters]
FOR /F ["options"] %variable IN ('command') DO command [command-parameters]

例如:

@echo off
FOR /F %%i in ("abcde") DO (echo %%i )
pause

输出:

adbce

这种用法的options有讲究:

        eol=c           - 指一个行注释字符的结尾(就一个)skip=n          - 指在文件开始时忽略的行数。delims=xxx      - 指分隔符集。这个替换了空格和制表符的默认分隔符集。tokens=x,y,m-n  - 指每行的哪一个符号被传递到每个迭代的 for 本身。这会导致额外变量名称的分配。m-n格式为一个范围。通过 nth 符号指定 mth。如果符号字符串中的最后一个字符星号,那么额外的变量将在最后一个符号解析之后分配并接受行的保留文本。usebackq        - 指定新语法已在下类情况中使用:在作为命令执行一个后引号的字符串并且一个单引号字符为文字字符串命令并允许在 file-set中使用双引号扩起文件名称。

其中delims=就相当于JAVA中的split,
而tokens=2,就相当于split返回的数组中取第2个也就是split(“xx”)[1],
依此类推。
例如一个hosts.txt文件中存有:

192.168.0.111
192.168.0.53
192.168.0.32
192.168.0.14

现用命令:

@echo off
FOR /F "delims=. tokens=4" %%i in (hosts.txt) DO (echo %%i )
pause

输出即为:

111
53
32
14

另外set命令可以用来作为赋值使用,

SET [variable=[string]]
SET /A expression
SET /P variable=[promptString]

第一种就是普通的赋值,第二种是表达式赋值,第三种是系统输入,类似C语言的scanf;
用法简单:

set str1=sssss
set /A c=2+3
set /P c=input:

另外注意变量延迟(setlocal)的用法,往往与!配合使用:

@echo off
set var=ff
for /l %%i in (1,1,3) do (set var=%%iecho %var%echo !var!
)

输出为:

ff
!var!
ff
!var!
ff
!var!

加入变量延迟操作以后:

@echo off&setlocal enabledelayedexpansion
set var=ff
for /l %%i in (1,1,3) do (set var=%%iecho %var%echo !var!
)

输出为:

ff
1
ff
2
ff
3

这和其他编程语言中的自增i++有点相似的意味。

最后贴出整个代码,也传到github批处理代码:

@echo offrem 得到本机IP
for /f "tokens=4" %%a in ('route print^|findstr 0.0.0.0.*0.0.0.0') do (set IP=%%a
)
echo LocalHost : %IP%
echo %cd%rem 得到局域网范围
for /f "tokens=1-3 delims=." %%i in ('echo %IP%') do (set local_area=%%i.%%j.%%k
)
echo LocalArea : %local_area%:main
echo please choose execution:
echo    1.scan IP in LAN
echo    2.connect all host:
echo    3.install APK:
echo    4.start APK:
echo    5.kill app process:
echo    6.clear App:
echo    7.uninstall APK:
echo    0.exit:set /p choose=please input choose:
if %choose%==1 goto scan
if %choose%==2 goto connect
if %choose%==3 goto install
if %choose%==4 goto startapp
if %choose%==5 goto killapp
if %choose%==6 goto clearapp
if %choose%==7 goto uninstall
if %choose%==0 exit
pause:scan
del %~dp0reachable_list.txt
@rem ping局域网内IP
setlocal enabledelayedexpansion
set /p indexStart=input start(such as 80):
set /p indexEnd=input end(such as 100):set /a total = 0FOR /L %%n in (%indexStart%,1,%indexEnd%) DO (ping %local_area%.%%n -n 1 -w 100IF !ERRORLEVEL! EQU 0 (echo %local_area%.%%n >> %~dp0reachable_list.txtset /a total = total + 1)
)
echo %total% alive
endlocal
pause
goto main:connect
setlocal enabledelayedexpansion
FOR /f %%h in (%~dp0reachable_list.txt) DO (adb connect %%h:5555echo ----------%%h connect success
)
adb devices
endlocal
pause
goto main:install
@rem 设置apk路径
setlocal enabledelayedexpansion
set /p apk_path=input apk_path:
if not exist %apk_path% (echo %apk_path% not exist!
)
FOR /f %%h in (%~dp0reachable_list.txt) DO (adb -s %%h:5555 install -r -t %apk_path%echo ----------%%h install success
)
endlocal
pause
goto main:startapp
@rem 启动apk
setlocal enabledelayedexpansion
set /p apk_intent=input apk_intent:
FOR /f %%h in (%~dp0reachable_list.txt) DO (adb -s %%h:5555 shell am start -n %apk_intent%echo ----------%%h start success
)
endlocal
pause
goto main:killapp
@rem 启动apk
setlocal enabledelayedexpansion
set /p apk_package1=input apk_package:
FOR /f %%h in (%~dp0reachable_list.txt) DO (adb -s %%h:5555 shell am force-stop %apk_package1%echo ----------%%h kill app success
)
endlocal
pause
goto main:clearapp
@rem 启动apk
setlocal enabledelayedexpansion
set /p apk_package1=input apk_package:
FOR /f %%h in (%~dp0reachable_list.txt) DO (adb -s %%h:5555 shell pm clear %apk_package2%echo ----------%%h clear app success
)
endlocal
pause
goto main:uninstall
@rem 卸载apk
setlocal enabledelayedexpansion
set /p apk_package2=input apk_package:
FOR /f %%h in (%~dp0reachable_list.txt) DO (adb -s %%h:5555 uninstall %apk_package2%echo ----------%%h uninstall app success
)
endlocal
pause
goto main

bat批处理与adb命令的配合相关推荐

  1. windows之bat脚本控制adb命令实现:安卓手机定时循环开关飞行模式

    一 背景 朋友请我帮他实现一个小功能:安卓手机定时循环开关飞行模式(目的是为了保持网络活性) 以下是pass掉的方案: 打包成系统app,必须有安卓系统签名,再怎么花里胡哨(如放到/system/ap ...

  2. bat批处理for /f命令

    含有/F的for详细说明 含有/F的for有很大的用处,在批处理中使用的最多,用法如下:  格式:  FOR /F ["options"] %%i IN (file) DO com ...

  3. BAT批处理之type命令

    Type命令对一般文本文件(.txt)进行处理,对其他类型文件就不好用了. 基本语法 type [drive] [path] [filename],本命令是用于打开txt文档,并在cmd窗口显示txt ...

  4. ADB命令封装批处理文件(无线调试、安装 apk 到指定已连接设备)

    测试机设备 id 用 usb 线连接电脑,打开 usb 调试,可以看到设备的 serial number adb devices 功能列表 一键连接无线调试 安装 apk 到指定的已连接设备 使用方法 ...

  5. 通过bat批处理命令进行adb push和adb pull批量拉取文件

    通过bat批处理命令进行adb push和adb pull批量(通配符)拉取文件 代码环境:win10 powershell.adb设备 为了adb调试方便,花了一天时间简单入门了下bat批处理命令, ...

  6. 使用adb命令批处理安装卸载apk

    使用adb命令批处理安装&卸载apk 一.bat安装 1.修改bat文件内adb_path为你adb.exe所在目录 除开发者sdk自带的,也可以是豌豆夹.91等adb.exe所在目录 2.直 ...

  7. BAT批处理命令 教程

    第一章批处理基础 第一节常用批处理内部命令简介批处理定义:顾名思义,批处理文件是将一系列命令按一定的顺序集合为一个可执行的文本文件,其扩展名为BAT或者CMD.这些命令统称批处理命令. 小知识:可以在 ...

  8. DOS循环:bat/批处理for命令详解之一 (史上虽详尽的总结和说明~~)

    DOS循环:bat/批处理for命令详解之一 (史上虽详尽的总结和说明~~) --- --- 前言: 虽然以前对批处理也算有点研究,但一直对for命令理解不够透彻,偶尔用时也是照猫画虎的用一下. 虽然 ...

  9. bat循环执行带参数_dos命令exit图文教程,结束退出CMD.EXE程序或当前bat批处理脚本...

    大家好,我是老盖,首先感谢观看本文,本篇文章做的有视频,视频讲述的比较详细,也可以看我发布的视频. 今天我们学习dos命令中的exit这个命令,退出 CMD.EXE 程序(命令解释器)或当前批处理脚本 ...

最新文章

  1. 2个月精通Python爬虫——3大爬虫框架+6场实战+分布式爬虫,包教包会
  2. python支付程序源码_python项目中实现支付宝网页支付
  3. 2020-12-07 Halcon初学者知识【2】打开图像和显示
  4. 【Rsyslog】 从json 中通过正则 key 获取 value值,rsyslog正则匹配获取key 的 value值
  5. The server selected protocol version TLS10 is not accepted by client preferences [TLS13, TLS12]
  6. window安装mysql5.7解压版(解决乱码问题)
  7. linux创建自定义组件qt,关于QT自定义控件
  8. Skywalking-07:OAL原理——解释器实现
  9. 深度学习-吴恩达-笔记-6-优化算法
  10. 历史上的今天:首条海底光缆开通;VeriSign 收购 Network Solutions;计算机图形学先驱诞生...
  11. Flutter学习 — 使用WebSockets
  12. Linux四剑客详解——find
  13. @+保留关键字当标识
  14. 浅析java垃圾回收机制
  15. pygame判断鼠标左键_鼠标科普,选对鼠标用好鼠标。
  16. 啊哈算法(python)
  17. 概率论总结(《概率论与数理统计》第四版 浙江大学)
  18. HTML 标签参考手册 - 功能排序
  19. Geometry-enhanced molecular representation learning for property prediction|GeoGNN|将几何增强分子表示用于分子性质预测
  20. Keil 5 C51与STM32

热门文章

  1. 修改图书信息c语言,图书信息管理系统c语言.doc
  2. php ajax 考试倒计时,基于Ajax技术实现考试倒计时并自动提交试卷
  3. Assignment | 05-week3 -Part_1-Neural Machine Translation
  4. 003 C语言 输出名言
  5. 可复制的领导力前两章总结
  6. 柱坐标下多重网格法解泊松方程-python
  7. 《黄帝内经.生气通天论篇》不生病的智慧节选01
  8. Vue报错记录——无法找到app
  9. 【转载收藏】Unity预计算实时GI
  10. Vue:运行项目时报错:Module not found: Error: Can't resolve 'sass-loader' in