原因:写这个批处理的原因是:在测试手机包的时候遇到bug需要截图/录视频/拿log上传到bug单,由于每次都
需要再手机上截下来然后传到电脑,再从电脑下载下来进行处理后上传,次数不多的时候感觉倒还好,次数一多
起来,这么操作感觉费时间还麻烦,我就想着有没有一种办法可以直接在电脑截手机的图,如此便省去了传来传
去的麻烦。于是我想到了批处理。
网上有很多关于批处理的教程,有一键截屏,一键录屏,一键拉取log的,其本质都是用的adb,有一点点adb的基
础就可以轻松完成这三个的批处理,我便不再赘述,这里放上我的代码方便自己日后取用。我写这个工具是可以用就行,因此除了功
能代码以外,没有做其他任何优化,略简单一些。
一键截屏(非原创)
1 | @ECHO off |
这个是我当时在搜adb截屏命令的时候搜出来的,具体是哪几篇博文我已经忘了,所以我只能标明是非原创,无法注明出处
这个虽然也很精简,但是比起我最初的想法更佳完善,有几个点是我当时没有想到的,我的想法是能截图就行,原本我打
算一行代码完事,但是后来查了很多个博主的代码,发现其实这个也可以写得很复杂很完善,不禁感叹他们把事情做到细致完美的能力
在结合了几篇博文的代码以后,去掉一些我认为不必要的东西,然后在复制粘贴的基础上修改后,就变成了上面这个代码的模样
再精简一下,其实只有几行命令,分别是:
1 | adb wait-for-device |
- 等待连接adb命令(这个命令在做这个批处理前我并不知道有这个命令,是在搜索过程中看到别人在用,然后特地去查了一下才发现的这个命令,算是一个意外的收获)
- 截图命令:这里是执行截图命令后将图片保存在手机中
- pull命令:将截图从手机中传输到电脑中
- ren重命名命令:这个命令是属于批处理的命令,不是adb命令,也是我在搜索过程中的另一个收获,我在找到这个命令之前甚至没有想过要给文件重命名,想着直接性图
片覆盖旧图片就好了,但是其实如果在需要连续截图的时候,或者截多张图片的时候,新图片覆盖旧图片的方式就会显得有点麻烦了,所以即使当时在重命名这条命令上掉了
坑,还是花了不少闲时把它搞好的。
这里记录一下这个坑:当时我搜索出来的命令是:ren C:\Users\千羽\Desktop\screencap\screenshot.png "%date:~0,4%%date:~5,2%%date:~8,2%%time:~0,2%%time:~3,2%%time:~6,2%".png
这条命令无论我怎么修改输出,它都说参数格式不正确,我当时的注意力是放在原文件名和新文件名上,以为这两个的格式不对,所以一直在修改这俩个文件名字,但是无论
我当时尝尽任何方法,都提示说参数格式不正确。没有办法,我只能选择排除法,首先上网查找资料,ren命令的格式是什么样子的,ren 路径\旧文件名 新文件名,这么看
来,可以排除是ren命令格式的问题。然后我看向后面的新文件名,这串是以时间来命名的命令,当时看见这串命令的时候毫无违和感,感觉就应该是这样的,直到我把这行代码"%date:~0,4%%date:~5,2%%date:~8,2%%time:~0,2%%time:~3,2%%time:~6,2%"
改成123,也就是把新文件的名字改成123.png,然后执行命令成功时,我瞬间反应过来,是双引号引早了,双引号应该要把.png包括在内,难怪一直提示参数格式不正确。至此,这个坑填完了。 - 删除截图命令:这个命令也是我之前没考虑到的地方,及时删除不需要的文件释放内存,我觉得这是一种很好的代码习惯和代码意识,这也是一个收获。
一键录屏(非原创)
录屏和截屏原理都是一样的,只是adb命令稍有不同而已,这里不再啰嗦,直接记录一下代码######拉最新的视频文件(半原创,参考了bat脚本—for循环结合adb命令的格式)1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23@ECHO off
set Str=快速录屏至电脑_V2.0_20170829 by HRD
title %Str%
ECHO %Str%
ECHO 等待Android设备插入...
ECHO wait-for-device
adb wait-for-device
ECHO Start...
ECHO 已识别到Android设备...
ECHO 正在录屏中,请稍候...
adb shell screenrecord /sdcard/screenrecord.mp4
ECHO.[手机录频完成]
ECHO 正在将录屏复制到PC,请稍候...
adb pull /sdcard/screenrecord.mp4 C:/Users/千羽/Desktop/screenrecord
ECHO 复制到pc成功
ECHO 正在修改名字,请稍后...
ren C:\Users\千羽\Desktop\screenrecord\screenrecord.mp4 "%date:~0,4%%date:~5,2%%date:~8,2%%time:~0,2%%time:~3,2%%time:~6,2%.mp4"
ECHO 修改名字成功,正在删除手机中的录屏,请稍后...
adb shell rm /sdcard/screenrecord.mp4
ECHO 删除手机录屏成功
ECHO 截图成功
timeout /t 2
echo 2s后退出
因为adb的录屏只能录取三分钟的视频,但有的时候录屏会比较长,超过三分钟的视频该怎么办呢,我当时想的办法时,先用手机自带录屏软件录制下来,然后用adb拉去出来
这个时候又有一个新的问题,手机中视频文件太多的时候怎么办,难不成要全部都拉到电脑或者把非bug的视频都删掉吗,如果是测试机的话当然把非当前bug的视频删掉是可以的,
当时如果是自己正在用的手机如此操作显然行不通,那怎么办呢,我想到可以利用时间排序的方式,获取最新的那几个,于是写了代码如下:1
2
3
4
5
6@setlocal enabledelayedexpansion
@ECHO off
for /f "delims=" %%i in ('adb shell ls -r /sdcard/DCIM/Screenshots/*.mp4') do (
adb pull %%i C:/Users/千羽/Desktop/new_screenrecord
)
pause
一键拉取log
拉日志的adb命令是:adb logcat >E:/temp/log.txt.,这行命令过后,开始进行操作获取日志信息,获取完毕后,按ctrl+c结束命令就可以拉到log啦
这里over啦