批处理在日常工作的应用(一)

2018-09-10  本文已影响115人  不浪费一个字节
概述

  本系列文章主要介绍批处理在日常工作中的应用,具体的语法不作介绍,网上有很多这方面的博客,以下推荐几个:

  1. 百科百科对bat介绍
  2. 批处理基本语法整理
  3. bat命令入门与高级技巧详解

本篇文章主要介绍adb和批处理结合解决平时工作上的问题。

一、通过adb安装apk

    对于android开发和测试的小伙伴来说,安装apk很是常见的,我们可以通过批处理来做这件事。不过你们肯定问会说,这个有啥麻烦的,一个adb install xxx.apk 搞定,但有时候情况并不是,举个最常见的例子:平时一台电脑可能连了多个android设备,这时候你要安装的话,要不拔掉不用的,只保留一个需要安装的设备,要不通过-s 命令参数指定一台需要安装的android设备,但感觉都挺麻烦。有时候安装apk的时候需要查看这个apk版本和包名,可以通过:

 aapt d badging xx.apk

查出版本号和包名称,这时候我们可以考虑将这两个功能合在一起,既能看版本又能方便安装。
    首先想到的是批处理,因为批处理在win系统上天然支持,只要写好这个脚本就可以帮你做很多事,而且不需要像java,python一样安装运行环境。

1. apk安装脚本代码
@echo off
SETLOCAL ENABLEDELAYEDEXPANSION 
set devs=
set num=0
set select=
set devname=
set packname=
set newVersionName=
echo ==================== 当前连接的设备 ====================
rem 获取版本信息
for /f "tokens=2,3,4" %%a in ('aapt d badging %1') do (
    set /a n+=1 
    if !n!==1 (
        echo    应用名称: %~n1%~x1      %%a
        echo    应用版本: %%b   %%c
        set newVersionName=%%c
        for /f "tokens=2 delims=^=" %%i in ("%%a") do set packname=%%i
    )
)
rem 获取当前连接的设备
echo.

for /f "skip=1" %%a in ('adb devices') do (
    set dev=%%a
    if not "!devs!"=="" (
        set "devs=!devs!,!dev!"
    ) else (
        set "devs=!devs!!dev!"
    )
    set /a num+=1
    rem 获取设备名称
    for /f "delims=," %%i in ('adb -s !dev! shell getprop ro.product.model') do set devname=%%i
    rem 显示可选设备
    echo    设备: !num! !dev! !devname!
)
echo ==================== 当前连接的设备 ====================
echo.

rem 如果只有一个设备,直接安装
if !num! equ 1 (
    set select=!devs!
    goto :install
)

rem 如果有多个设备选择一个设备进行安装
set /p num=选择一个设备进行安装(选择序号):
for /f "delims=, tokens=%num%" %%i in ("!devs!") do set select=%%i
    goto :install
    
:install
echo.
set versionName=
for /f "delims=" %%i in ('adb -s !select! shell dumpsys package !packname! ^| findstr versionName') do (
    set versionName= %%i
)
if "%versionName%" neq "" (
    echo 版本升级: %versionName% --^> %newVersionName%
)

rem 开始安装
echo.
echo 正在安装..., 待安装的设备: !select!
if "%~d1" == "\\" (
    adb -s !select! install -r -d %1
) else (
    rem 进入相应目录,避免特殊目录导致安装失败问题
    cd %~dp1
    adb -s !select! install -r -d %~nx1
)
pause
2. 代码介绍

    代码逻辑还是比较清晰的,从上到下主要分3个部分,第一部分通过aapt解析apk获取版本号和包名称。第二部分通过adb devices命令获取当前连接的设备,第三部分是apk安装命令。需要注意的是,adb install对于一些中文目录不支持,安装回报错,需要先进入这个目录后开始安装。但类似共享目录这种就不能这样,只能按照路径进行安装,所以安装部分代码拆成两个逻辑实现。代码注释也比较清楚了,详细的不介绍了,可以对比注释理解这段脚本代码。

3. 怎么应用这个批处理

    代码都是实现了,但怎么和apk进行关联呢,我们知道一个文件可以指定他的打开方式,bat处理也可以看成是一个程序。那依次类推是不是我们可以指定apk打开方式为批处理。这样我们就可以直接双击这个apk就能安装了。
    我们新建一个后缀为 .bat 的install_apk.bat文件,这个批处理文件你就当成一个软件放到一个文件夹下,这时候如下图1-1 指定打开方式为 install_apk.bat。指定打开方式完成后,这时候直接双击apk就能安装了。

图1-1 右键指定打开方式

    双击后如下图所示:


安装截图示例图 图1-2

    是不是很方便,只要双击apk就能安装,不需要再去敲命令,就能帮你安装又能查看apk安装的信息,甚至看到安装在android设备的上个版本号信息。

二、通过adb截屏

    这个也是很常见的应用,平时的时候需要敲至少两行命令才行,
第一步截图保存到sd卡中:

adb shell /system/bin/screencap -p /sdcard/screen.png 

第二步copy sd卡中保存的图片到电脑端

adb pull /sdcard/screen.png C:/Users/%username%/Desktop/screen.png 

通过批处理进行组合我们能更高效的完成,只要点点鼠标就行。

1. 代码实现
@echo off
SETLOCAL ENABLEDELAYEDEXPANSION 
set devs=
set num=0
set select=
set devname=

for /f "skip=1" %%a in ('adb devices') do (
    set dev=%%a
    if not "!devs!"=="" (
        set "devs=!devs!,!dev!"
    ) else (
        set "devs=!devs!!dev!"
    )
    set /a num+=1
    rem 获取设备名称
    for /f "delims=," %%i in ('adb -s !dev! shell getprop ro.product.model') do set devname=%%i
    rem 显示可选设备
    echo    设备: !num! !dev! !devname!
)
echo ==================== 当前连接的设备 ====================
echo.

if !num! equ 1 (
    set select=!devs!
    goto :shot2
)
    
set /p num=选择一个设备进行安装(选择序号):
for /f "delims=, tokens=%num%" %%i in ("!devs!") do set select=%%i
    goto :shot2
    
:shot2
echo  ------^>正在截图...
adb -s !select! shell /system/bin/screencap -p /sdcard/screenshot.png 
if !errorlevel! equ 1 goto :fail
echo  ------^>正在复制图片到桌面
adb -s !select! pull /sdcard/screenshot.png C:/Users/%username%/Desktop/screenshot.png > Nul
if !errorlevel! equ 1 goto :fail
echo  ------^>截图成功
goto :end

:fail
echo  ------^>截图失败!!

:end
echo.
pause
2. 代码介绍

    主要也分三个部分,第一部分选择设备,第二部分截图,第三部分copy图片到电脑桌面。第一部分是直接拿上面安装脚本代码的。当然了,像这种共用的模块可以封装成一个函数供其他模块调用。我偷了个懒直接拿来用了。

3. 应用

    应用么,很简单,双击这个写好的批处理即可。

总结

    上面介绍的2个只是我平时遇到比较多的例子,还有许多其他应用,需要各位大大去挖掘,肯定还有许多我还没发现的,各位都可以提提意见,共同进步哈。上面有啥错误,也欢迎指正。下篇介绍其他的应用。

上一篇 下一篇

猜你喜欢

热点阅读