bat批量备份手机APP

摘要:
AdbPath=ADB工具包文件夹(ADB+aapt)backupPath=apk备份文件夹@echooff&nulset“path=%path%;%adbPath%”REMcountset“count=0”for/f“token=1*delims=:”%%iin('adbshellpmlistpackage-3')do(set/a“count+=1”echo!
 

adbPath = ADB工具包文件夹(adb+aapt)
backupPath = apk备份文件夹

@echo off & chcp 65001 & cls & cd /d "%~dp0"
setlocal enabledelayedexpansion
REM adb tool path
set "adbPath=D:softwareandroid-sdk-windowsplatform-tools"
REM backup path
set "backupPath=D:APP_BAK"
mkdir "%backupPath%" >nul 2>nul
set "path=%path%;%adbPath%"
REM counter
set "count=0"
for /f "tokens=1* delims=:" %%i in ('adb shell pm list package -3') do (
    set /a "count+=1"
    echo !count!:%%j
    set "versionCode=" & set "versionName=" & set "remotePath=" & set "chsName="
    REM get versionCode,versionName
    for /f "tokens=1,2 delims== " %%a in ('adb shell pm dump "%%j" ^| findstr /i "versionCode= versionName="') do (
        if /i "%%a"=="versionCode" set "versionCode=%%b"
        if /i "%%a"=="versionName" set "versionName=%%b"
    )
    set "localName=[%%j]-!versionCode!-V!versionName!.apk"
    REM get remotePath
    for /f "tokens=2 delims=:" %%a in ('adb shell pm path "%%j"') do set "remotePath=%%a"
    echo pulling ...
    REM pull apk
    if exist "%backupPath%*!localName!" (
        REM if exist ,skip backup
        for %%a in ("%backupPath%*!localName!") do echo skip %%a
    ) else (
        adb pull "!remotePath!" "%backupPath%!localName!" >nul 
        REM get chinese name
        for /f "tokens=2 delims=:'" %%a in ('aapt dump badging "%backupPath%!localName!" ^| findstr /i "application-label:"') do set "chsName=%%a"
        REM rename 
        if not "!chsName!"=="" move /y "%backupPath%!localName!" "%backupPath%!chsName!!localName!" >nul
        echo done. %backupPath%!chsName!!localName!
    )
    echo --------------------------------------------------
)
echo backup done.
pause&exit

免责声明:文章转载自《bat批量备份手机APP》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇ASP 下 能作为json输出后js能解密的 escape 函数关联规则挖掘理论和算法下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

python数据结构与算法——桶排序

桶排序的时间复杂度是O(M+N),通过建立对原始数据的有序统计表,实现非常快速的排序过程 可以用hashtable(或者dict)实现,查询复杂度为O(1) 贴代码: 1 # 简单桶排序 从小到大 2 def bucksort(A): 3 4 bucks = dict() # 桶 5 for i in A:...

WPF使用Webbrowser操作网页的主要代码

1,引用mshtml.dll using mshtml; 2,获取元素属性值 IHTMLDocument2 doc2=(IHTMLDocument)webbrowser1.Document; IHTMLElement img=(IHTMLElement)doc2.all.item("regimg",0); string imgUrl=(string)i...

SpringCloud实战十三:Gateway之 Spring Cloud Gateway 动态路由

前面分别对 Spring Cloud Zuul 与 Spring Cloud Gateway 进行了简单的说明,它门是API网关,API网关负责服务请求路由、组合及协议转换,客户端的所有请求都首先经过API网关,然后由它将匹配的请求路由到合适的微服务,是系统流量的入口,在实际生产环境中为了保证高可靠和高可用,尽量避免重启,如果有新的服务要上线时,可以通过...

JQ版本对比

目前jQuery有三个大版本:1.x:兼容ie678,使用最为广泛的,官方只做BUG维护,功能不再新增。因此一般项目来说,使用1.x版本就可以了,最终版本:1.12.4 (2016年5月20日)2.x:不兼容ie678,很少有人使用,官方只做BUG维护,功能不再新增。如果不考虑兼容低版本的浏览器可以使用2.x,最终版本:2.2.4 (2016年5月20日)...

转一篇shared_ptr的小文

原文地址: http://euyuil.com/2344/ 在最近的期中项目“牛奶”里,我大量运用了共享指针。虽然这是一种偷懒的表现,但是对于这个“模拟牛奶生产过程”的项目来说,我们并不在乎它对效率产生的影响。 题外话说完后,说说共享指针。共享指针 (shared_ptr) 是现在的 Boost 库中提供的,并且应该是将来 C++1x 的标准库中提供的一...

multiselect多选下拉框

具体实现  <input type="hidden" name="q_dueDay" value="${baseQueryBean.q_dueDay}">//这个为隐藏域后台直接使用这个为参数 <select name="example" multiple="multiple" style="195px"> <c:forEa...