先说结论:批量导出截图不用装第三方工具,ADB 三条命令就够。前提是实例已开 ADB 调试、本机装好 platform-tools,adb devices 能看到 5555 那台。单张用 screencap 加 pull,批量用 for 循环按序号命名,整个目录一次 pull 下来。先跑通单张再上循环,出问题好定位。全程用同一个命令行窗口,别开两个。配置 10 分钟能做完,之后每批 20 张大约 30 秒。

一、前提:三样东西先到位
实例侧的 ADB 调试要开着。开关没打开,命令发过去也没有回应,先回控制台把它打开,端口记下来,默认 5555。
本机装 platform-tools,解压后把目录加进 PATH。Windows 用 PowerShell 或 cmd,macOS 和 Linux 直接开终端,命令完全一样。PATH 没配对时命令会提示找不到 adb,加完记得重开一个终端窗口。
验证只有一步:adb devices,列表里出现你的 IP:5555 并且状态是 device 才算通。显示 unauthorized 是实例那边没点授权,去云机桌面点允许;显示 offline 先 adb disconnect 再重连。
二、三条命令,从单张到批量
单张截图分两步,云端抓图、本地接收。抓图存到 /sdcard/shot.png,pull 拉回当前目录,整个过程两秒左右。
批量用 for 循环,按序号命名,同名会覆盖,所以序号必须变。想再稳一点就带时间戳,date 变量每次执行结果都不同,一天跑几批也撞不上。
# 单张
adb shell screencap -p /sdcard/shot.png
adb pull /sdcard/shot.png ./shot.png
# 循环批量,按序号命名
for i in $(seq 1 20); do
adb shell screencap -p /sdcard/shot_$i.png
adb pull /sdcard/shot_$i.png ./shots/shot_$i.png
sleep 2
done
# 时间戳命名,不会覆盖
name=$(date +%Y%m%d_%H%M%S).png
adb shell screencap -p /sdcard/$name
adb pull /sdcard/$name ./shots/$name
| 命令 | 干什么 | 容易踩的坑 |
|---|---|---|
| screencap -p | 抓当前屏幕存到云端 | 漏了 -p,图是坏的 |
| adb pull | 把文件拉回本地 | 本地目录不存在会报错 |
| for + seq | 连续抓多张 | 不 sleep 会抓到同一帧 |
| date 变量 | 时间戳命名 | 连拍太快可能重名 |
三、一次拉整个目录,比逐张快
截图多的时候别一张张 pull。先在云端统一存进一个目录,再整目录拉一次,adb pull 会把里面的文件全带回来。
adb shell mkdir -p /sdcard/screens
adb pull /sdcard/screens/ ./shots
拉完按修改时间排一眼,缺张就补。批量开始前把云端目录清空,上一批的旧图混进来,回头分不清哪张是哪次的。文件名带上实例编号,本地一眼能认出是哪台机器出的。
四、批量前先清存储
截图占空间比想得快。一张 1080P 的 PNG 大概 1 到 2MB,200 张就是两三百 MB。实例磁盘吃紧之后 screencap 会直接失败,报的错还跟存储没关系,容易查偏。
做法简单:每批开始前清空 /sdcard/screens,拉完立刻删云端原件。删之前看准路径,rm -rf 敲错目录就麻烦。
多开的时候每台实例的截图目录是分开的,本地接收也别用同一个目录,会互相覆盖。按实例编号建子目录,一台一个,台账可以照多开账号托管来记,分目录的做法见多开流程怎么排。台数怎么配,对着六档价格全表对一遍就够了。
Q:adb 连不上,一直 timeout 怎么办?
A:先确认实例的 5555 端口放行,再看本机防火墙。状态显示 unauthorized 不是连不上,是实例那边没点授权,去云机桌面点允许即可。
Q:拉下来的文件是 0 字节?
A:多半是云端路径写错,或者 screencap 还没写完就 pull 了。先 adb shell ls 看文件在不在、大小正不正常,再加 sleep 2 重试。
Q:截图是空白的?
A:常见于系统缺中文字体,界面上的字渲染不出来,图就成了白底。换个语言环境或者换一台实例再看,别急着改命令。
