「这是我参与2022首次更文挑战的第16天,活动详情查看:2022首次更文挑战」。
前言
之前咱们对于Android应用程序的操作都是传输apk包安装卸载,顶多也只是adb命令执行,在遇到繁多的apk时,这样的操作无疑是效率低下的。所以我们需要对它进行脚本化处理,每次只需要在指定位置执行脚本即可完成批量处理。
bat批处理
批处理文件,在DOS和Windows(任意)系统中,.bat文件是可执行文件,由一系列命令构成,其中可以包含对其他程序的调用。这个文件的每一行都是一条DOS命令(大部分时候就好像我们在DOS提示符下执行的命令行一样),你可以使用DOS下的Edit或者Windows的记事本(notepad)等任何文本文件编辑工具创建和修改批处理文件。
批处理(Batch),也称为批处理脚本。顾名思义,批处理就是对某对象进行批量的处理,通常被认为是一种简化的脚本语言,它应用于DOS和Windows系统中。批处理文件的扩展名为bat 或cmd。比较常见的批处理包含两类:DOS批处理和PS批处理。PS批处理是基于强大的图片编辑软件Photoshop的,用来批量处理图片的脚本;而DOS批处理则是基于DOS命令的,用来自动地批量地执行DOS命令以实现特定操作的脚本。更复杂的情况,需要使用if、for、goto等命令控制程式的运行过程,如同C、Basic等高级语言一样。如果需要实现更复杂的应用,利用外部程式是必要的,这包括系统本身提供的外部命令和第三方提供的工具或者软件。批处理程序虽然是在命令行环境中运行,但不仅仅能使用命令行软件,任何当前系统下可运行的程序都可以放在批处理文件中运行。
--- 摘自百度百科
基础用法
这里着重介绍几个常用且比较有用的命令或者定义
- echo 同linux,意味输出: ==echo "win系统下执行"==
- set 表示设置变量:==set a=10==
set /p a=请输入 # 表示通过控制台输入
- %i% 表示变量引用:==set a=10&echo %a%==
- rem和::表示注释
- for...in ()循环,类似python写法,()里面表示可迭代的数据:==for %i in (1 2 3) do echo %i==
D:\10.40.0>for %i in (1 2 3) do echo %i
D:\10.40.0>echo 1
1
D:\10.40.0>echo 2
2
D:\10.40.0>echo 3
3
- if条件判断,注意,这点跟linux很类似,条件判断左右都需要留空格,不能紧凑
@echo off
set /p a="请输入:"
if %a% == 10 (
echo "正确"
) else (
echo "错误"
)
pause
- pause 表示暂停
- bat批处理文件一般以bat、cmd结尾,双击会调用cmd.exe来执行
==tips:保存bat文件是,记得选ANSI编码,因为cmd本身就是ANSI,否则会中文乱码==
bat批处理练习
上篇文章中关于Android安装包自动执行安装启动卸载的流程,可以通过脚本化来处理就不需要在cmd中一个个的执行了,了解了它的基本用法,那么开始来一步步的实现:
- 先要找到当前apk的文件,并能for循环echo打印到控制台
@echo off
rem setlocal enabledelayedexpansion
for %%i in (D:\10.40.0\*.apk) do (
echo %%i
)
pause
-
- 是不是有点奇怪,在cmd中命令执行参数引用是%i,在bat处理中却是%%i,还有一点需要注意在in()如果在目标文件夹中执行,不需要绝对路径,只要匹配正确的文件即可。
D:\10.40.0\app-release_10400_10_三星_sign.apk
D:\10.40.0\app-release_10400_11_魅族_sign.apk
D:\10.40.0\app-release_10400_2_vivo_sign.apk
D:\10.40.0\app-release_10400_3_oppo_sign.apk
D:\10.40.0\app-release_10400_4_小米_sign.apk
D:\10.40.0\app-release_10400_5_华为_sign.apk
D:\10.40.0\app-release_10400_6_应用宝_sign.apk
D:\10.40.0\app-release_10400_7_ali_sign.apk
D:\10.40.0\app-release_10400_8_baidu_sign.apk
D:\10.40.0\app-release_10400_9_360_sign.apk
D:\10.40.0\app-release_10400_jiagu_sign.apk
请按任意键继续. . .
==pause在你调试的时候很有用,即每个功能下都跟一个暂停命令,最后它会提示你按任意键继续...==
- 现在可以将echo换成adb install 安装命令 启动命令 卸载命令
@echo off
rem setlocal enabledelayedexpansion
for %%i in (D:\10.40.0\*.apk) do (
adb install -r %%i
adb shell am start -W com.chutzpah.yasibro/com.chutzpah.yasibro.main.view.MainActivity
TIMEOUT /T 3
adb shell pm uninstall com.chutzpah.yasibro
)
pause
-
- 这里面是并列关系,跟linux无异
扩展
在调试bat时,前面说了可以使用pause,因为每次都需要按enter键,那如果正式发布了,需要等待总不能使用pause了吧,谁来给你按回车,所以还需要像sleep一样的方法。
- TIMEOUT /T 3;表示等待3s,它可以自动倒计时结束,然后执行下一步
D:\10.40.0>TIMEOUT /?
TIMEOUT [/T] timeout [/NOBREAK]
描述:
这个工具接受超时参数,等候一段指定的时间(秒)或等按任意键。它还接受
一个参数,忽视按键。
参数列表:
/T timeout 指定等候的秒数。有效范围从 -1 到 99999 秒。
/NOBREAK 忽略按键并等待指定的时间。
/? 显示此帮助消息。
注意: 超时值 -1 表示无限期地等待按键。
示例:
TIMEOUT /?
TIMEOUT /T 10
TIMEOUT /T 300 /NOBREAK
TIMEOUT /T -1
- 还可以通过ping -n指定次数来延迟,不出意外默认是4s因为要来4次;
ping -n 3 127.0.0.1 >nul
# >nul 重定向不要输出结果
- 外部命令:choice
choice /N /C y /T 5 /D y>nul
延时5秒
小结
经过这一轮的编写bat学习,工作效率会不会提升呢?直呼666!
感兴趣的同学,赶紧学起来,下一篇咱们再用python实现一遍。