当前位置: 首页 > article >正文

ADB 上传文件并使用脚本监控上传百分比

有个需求,需要测试 emmc的外部连续写入性能,使用 ADB 上传一个巨大的文件。并且在上传到一定值时进行干预。

因此但是 adb push 命令本身会 block 运行并且不返回进度,因此需要一个额外的监控脚本。

上传脚本:

@echo off
setlocal enabledelayedexpansion

set COUNTER=0
set TARGET_DEVICE=xxx
set ISO_FILE=C:\Users\xxx\Desktop\1.iso
set DEST_PATH=/sdcard/1

:READ
echo Pushing ISO file on round ...
adb -s %TARGET_DEVICE% push %ISO_FILE% %DEST_PATH%
if errorlevel 1 (
    echo Push failed, retrying...
    goto READ
)
echo File pushed successfully.

adb -s %TARGET_DEVICE% shell rm %DEST_PATH%
if errorlevel 1 (
    echo Remove failed, retrying...
    goto READ
)
echo File removed successfully.

set /a COUNTER+=1
echo Number of successful operations: !COUNTER!

:: 等待 5 秒
timeout /t 5 > nul
exit

监控脚本

@echo off
setlocal enabledelayedexpansion

:: 这里设置目标设备、目标路径和源文件路径
set TARGET_DEVICE=xxx
set DEST_PATH=/sdcard/1
set ISO_FILE=C:\Users\xxx\Desktop\1.iso

:: Get the total size of the ISO file
for %%F in ("%ISO_FILE%") do set TOTAL_SIZE=%%~zF

:MONITOR_PROGRESS
:: Check the size of the file on the device
::echo 读取文件大小
adb -s %TARGET_DEVICE% shell ls -l %DEST_PATH% > tempfile.txt

if errorlevel 1 (
    echo Failed to get file size.
    exit /b
)


:: 从 tempfile.txt 中提取文件大小
for /f "tokens=4" %%S in (tempfile.txt) do (
    set TRANSFERRED_SIZE=%%S
)

::set /a 命令仅支持 32 位整数,这意味着它不能处理超过 2147483647 的数值
:: 批处理默认的set /a 变量=算式 的结果要在[-2147483647,2147483647]这个范围,超过了会给异常提示
echo.
:: 计算并显示进度百分比
echo TRANSFERRED_SIZE=!TRANSFERRED_SIZE! TOTAL_SIZE=!TOTAL_SIZE!

:: 如果无法读取转移大小,则输出错误信息
if "!TRANSFERRED_SIZE!"=="" (
    echo Could not read the transferred file size. It may not exist yet.
) else (
	:: 使用 PowerShell 进行比较和计算
    for /f %%i in ('powershell -command "[double]!TRANSFERRED_SIZE! -lt [double]!TOTAL_SIZE!;"') do set "result=%%i"
	echo result=!result!
	
	if "!result!"=="True" (
		for /f "delims=" %%p in ('powershell -command "[math]::Round((%TRANSFERRED_SIZE% -as [double]) / (%TOTAL_SIZE% -as [double]) * 100, 2)"') do set PERCENTAGED=%%p
		echo 传输百分比: !PERCENTAGED!
		:: 睡眠一秒
		timeout /t 1 > nul
		:: 开启下次循环
		goto MONITOR_PROGRESS
    ) else (
        echo Progress: 100%
    )
)


:: Clean up
del tempfile.txt
echo Transfer completed successfully.
pause


http://www.kler.cn/a/453563.html

相关文章:

  • RTMW:实时多人2D和3D 全人体姿态估计
  • leetcode 27. 移除元素
  • docker mysql5.7安装
  • Jmeter下载安装配置教程(多版本)
  • 深入理解 PyTorch 的 view() 函数:以多头注意力机制(Multi-Head Attention)为例 (中英双语)
  • Mono里运行C#脚本5—mono_file_map_open
  • USB Hub 检测设备
  • Android APP 集成本地大模型 LLM
  • datax ubuntu安装
  • 华为 AI Agent:企业内部管理的智能变革引擎(11/30)
  • E-commerce .net+React(一)——项目初始化
  • Mac上Stable Diffusion的环境搭建(还算比较简单)
  • DevOps 中的 AI:测试始终是一个关键领域
  • 【ES6复习笔记】Promise对象详解(12)
  • cad学习 day7-9
  • 数据结构 C/C++(实验六:查找)
  • 35. TCP网络编程
  • 2024国赛A题第一问
  • 【ubuntu基础软件安装】
  • Weex购物车长列表横滑操作优化“编年史”
  • 成本高,周期长,家电行业如何突破重实验轻仿真的瓶颈?
  • 整合语音命令与大型语言模型 (LLM) 及传感器在人类和机器人之间进行有效的自然语言交流 以简化装配操作并提高生产车间的安全性
  • Redis可视化工具 RDM mac安装使用
  • 【C语言】判断素数
  • 电商平台能挡住恶意网络爬虫的攻击吗?
  • 一键自动创建删除磁盘的逻辑卷信息