菜鸟科技网

bat如何执行adb命令?

下面我将从基础到高级,详细讲解如何在 .bat 文件中使用 adb 命令。

bat如何执行adb命令?-图1
(图片来源网络,侵删)

前提条件:环境变量配置

在批处理脚本中直接使用 adb 命令,有一个最重要的前提:adb.exe 所在的路径需要被添加到系统的环境变量 PATH

如果未添加,你需要在脚本中指定 adb.exe 的完整路径,这会使脚本变得不灵活(比如在不同电脑上可能失效)。

如何检查并配置环境变量?

  1. 检查:打开命令提示符(CMD),输入 adb version 并回车。

    bat如何执行adb命令?-图2
    (图片来源网络,侵删)
    • 如果能看到版本信息,说明环境变量已配置正确。
    • 如果提示 'adb' 不是内部或外部命令,也不是可运行的程序或批处理文件,说明需要配置。
  2. 配置

    • 右键点击“此电脑” -> “属性” -> “高级系统设置” -> “环境变量”。
    • 在“系统变量”中找到 Path 变量,双击它。
    • 点击“新建”,然后将 adb.exe 所在的文件夹路径添加进去,通常是 SDK\platform-tools 这个路径。C:\Users\你的用户名\AppData\Local\Android\Sdk\platform-tools
    • 一路点击“确定”保存设置。
    • 重要:保存后,需要重新打开一个新的 CMD 窗口,环境变量才会生效。

基础用法:直接执行命令

最简单的方式,就像在命令行里一样直接写命令。

示例 1:test_adb.bat

@echo off
echo 正在检查设备连接...
adb devices
echo.
echo 正在获取设备型号...
adb shell getprop ro.product.model
pause

代码解释:

bat如何执行adb命令?-图3
(图片来源网络,侵删)
  • @echo off:关闭命令回显,这样执行脚本时,不会显示 adb devices 这条命令本身,只会显示命令的输出结果,使界面更整洁。
  • echo ...:在屏幕上输出一行文字。
  • adb devices:经典的 adb 命令,列出已连接的设备。
  • adb shell getprop ro.product.model:进入 adb shell,并执行 getprop 命令获取设备的型号。
  • pause:脚本执行完毕后会暂停,等待用户按任意键后才关闭窗口,这对于调试非常有用,否则窗口会一闪而过。

高级用法:处理变量和逻辑

批处理脚本真正的强大之处在于它可以使用变量、判断和循环。

示例 2:获取并使用变量

我们可以将 adb 命令的输出结果保存到一个变量中,然后使用它。

get_device_info.bat

@echo off
setlocal
:: 1. 获取设备序列号并保存到变量
for /f "tokens=1" %%i in ('adb devices ^| find "device$"') do (
    set "DEVICE_SERIAL=%%i"
)
:: 2. 检查是否成功获取到设备
if "%DEVICE_SERIAL%"=="" (
    echo 错误:未找到已连接的设备。
    pause
    exit /b 1
)
echo 已找到设备: %DEVICE_SERIAL%
echo.
:: 3. 使用变量执行命令
echo 正在获取设备型号...
adb -s %DEVICE_SERIAL% shell getprop ro.product.model
echo.
echo 正在获取 Android 版本...
adb -s %DEVICE_SERIAL% shell getprop ro.build.version.release
endlocal
pause

代码解释:

  • setlocalendlocal:定义一个局部作用域,在 setlocalendlocal 之间设置的变量(如 DEVICE_SERIAL),在脚本结束后会自动清除,不影响系统环境。
  • for /f "tokens=1" %%i in ('adb devices ^| find "device$"') do (...):这是批处理中非常强大的循环结构。
    • adb devices:列出设备。
    • ^|:管道符,在批处理中, 是特殊字符,需要用 ^ 进行转义。
    • find "device$":过滤 adb devices 的输出,只找到以 device 结尾的行(即已授权的设备)。
    • for /f 会循环处理 find 命令的每一行输出。
    • tokens=1 表示只取每行的第一个“词”(即设备序列号)。
    • %%i 是循环变量,将序列号赋值给它。
    • set "DEVICE_SERIAL=%%i" 将循环变量 %%i 的值保存到我们自己的变量 DEVICE_SERIAL 中。
  • if "%DEVICE_SERIAL%"=="" (...):判断变量是否为空,如果为空,说明没有设备连接,则报错并退出。
  • adb -s %DEVICE_SERIAL% ...-s 参数用于指定要操作的设备序列号,当连接多个设备时,这个参数至关重要。

示例 3:循环执行操作

假设你要安装多个 .apk 文件。

install_apps.bat

@echo off
setlocal
:: 假设所有的 APK 文件都在当前脚本的 "apks" 文件夹下
set "APK_DIR=apks"
:: 检查目录是否存在
if not exist "%APK_DIR%" (
    错误:找不到 "%APK_DIR%" 文件夹。
    pause
    exit /b 1
)
echo 正在扫描 %APK_DIR% 文件夹...
echo.
:: 循环遍历文件夹下的所有 .apk 文件
for %%f in ("%APK_DIR%\*.apk") do (
    echo 正在安装: %%~nxf
    adb install "%%f"
    echo.
)
echo 所有安装任务完成。
endlocal
pause

代码解释:

  • for %%f in ("%APK_DIR%\*.apk") do (...):这是另一个循环,用于遍历文件。
  • "%APK_DIR%\*.apk":表示 apks 文件夹下所有以 .apk 结尾的文件。
  • %%f 在每次循环中代表一个完整的文件路径(如 apks\app1.apk)。
  • %%~nxf:这是 %%f 的一个修饰符,~nx 表示只提取文件的名称和扩展名(如 app1.apk),方便在日志中显示。
  • adb install "%%f":将遍历到的 APK 文件路径作为参数传递给 adb install 命令,注意文件路径最好用引号括起来,以防路径中包含空格。

错误处理

在自动化脚本中,处理错误非常重要。adb 命令执行失败时,通常会返回一个非零的退出码,我们可以用 errorlevel 来判断。

safe_install.bat

@echo off
setlocal
set "APP_TO_INSTALL=my_app.apk"
if not exist "%APP_TO_INSTALL%" (
    echo 错误:找不到要安装的文件 "%APP_TO_INSTALL%"。
    pause
    exit /b 1
)
echo 正在安装 %APP_TO_INSTALL%...
adb install "%APP_TO_INSTALL%"
:: 检查上一条命令的执行结果
if %errorlevel% neq 0 (
    echo.
    echo 安装失败!请检查设备连接或 APK 文件。
    exit /b 1
) else (
    echo.
    echo 安装成功!
)
endlocal
pause

代码解释:

  • if %errorlevel% neq 0errorlevel 是一个内置变量,存储了上一条命令的退出码。0 表示成功,非 0 表示失败。neq 表示 "not equal"(不等于)。
  • adb install 失败,脚本会打印错误信息并以错误码 1 退出。

常见问题与技巧

问题 1:提示“adb 不是内部或外部命令...

原因:环境变量 PATH 未配置或配置不正确。 解决:请务必参考第 1 节,正确配置环境变量,并重新打开一个新的 CMD 窗口来运行脚本。

问题 2:adb devices 输出有 unauthorized

原因:电脑上从未信任过这个设备的 ADB 调试。 解决:在手机上弹出的“允许 USB 调试”对话框中勾选“始终允许”,然后点击“确定”。

问题 3:如何在脚本中模拟按键操作?

使用 adb shell input 命令。

:: 模拟按 Home 键
adb shell input keyevent KEYCODE_HOME
:: 模拟按返回键
adb shell input keyevent KEYCODE_BACK
:: 模拟输入文本 "hello world"
adb shell input text "hello world"
:: 模拟点击屏幕坐标 (500, 1200)
adb shell input tap 500 1200

你可以通过 adb shell getevent 或开发者选项中的“指针位置”来获取屏幕坐标。

问题 4:如何高效调试脚本?

  1. 使用 echo:在关键步骤前后使用 echo 命令打印变量值或状态信息,确认脚本是否按预期执行。
  2. 分段测试:将复杂的脚本拆分成多个小 .bat 文件,逐个测试其功能是否正常。
  3. 查看日志adb 命令失败,可以尝试在命令行手动执行该命令,观察完整的错误输出,这有助于定位问题。

通过以上这些方法,你就可以在批处理脚本中灵活、强大地执行各种 adb 命令,实现复杂的自动化任务了。

分享:
扫描分享到社交APP
上一篇
下一篇