bat批处理与adb命令的配合
和安卓系統打交道,難免用到adb命令;和很多安卓硬件打交道,就要大量用到adb命令,如果一個一個寫就太累了,在windows系統下還是借助批處理吧。
adb命令基礎
首先需要準備的一些adb命令:
- 查看當前連接的安卓設備
- 連接某個遠程安卓設備
- 為某安卓設備安裝某個應用
- 為某安卓設備卸載某個應用
- 為某安卓設備啟動某個應用
- 為某安卓設備停止某個應用
- 為某安卓設備清除某應用數據
| [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內置了一些比較有用的命令,利用他們可以如編程一樣寫出一個腳本用以處理邏輯:
| 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 /?可以得到相關語法解釋:
這里只截取了一部分,大致可以看到有三種用法,
第一種可用于判斷在此之前的一行dos命令是否得到了正確的結果,比如:
第二種和其他編程語言中的==或equals類似,比如:
@echo off set a="9" IF %a% == "9" (@echo success) pause第三種就是判斷文件是否存在的,不多說。
for命令同樣可以使用for /?查看幫助,這里用到的有兩種:
第一種,數字的遍歷:
例如:
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文件中存有:
現用命令:
@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;
用法簡單:
另外注意變量延遲(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命令的配合的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 人生感悟3
- 下一篇: 纺织品有害物质三项检测