Board logo

标题: [文件管理] adb 常用命令集合 [打印本页]

作者: went    时间: 2020-11-29 16:00     标题: adb 常用命令集合

本帖最后由 went 于 2020-11-29 19:14 编辑

adb工具包下载:
1.http://bcn.bathome.net/s/tool/index.html?key=adb
2.adb+aapt
adb 基础命令请参考
https://www.cnblogs.com/laoluoits/p/10985442.html
常用命令:
检测设备:
  1. adb devices
复制代码
有线连接设备:
  1. 数据线连接手机和电脑,手机打开USB调试即可
复制代码
无线连接设备:
  1. REM 命令: adb connect 手机IP:5555
  2. REM 手机电脑连接到同一局域网,手机打开网络ADB调试
  3. REM 出现connect to IP 即成功
  4. adb connect 10.2.1.172:5555
复制代码
推送文件到手机
  1. REM 命令:adb push "电脑文件路径" "手机文件路径"
  2. REM 保存原文件名
  3. adb push "G:\Desktop\1.txt" "/sdcard/"
  4. REM 保存新文件名
  5. adb push "G:\Desktop\1.txt" "/sdcard/2.txt"
复制代码
上传手机文件到电脑
  1. REM 命令:adb pull "手机文件路径" "电脑文件路径"
  2. REM 保存原文件名
  3. adb pull "/sdcard/1.txt" "G:\Desktop"
  4. REM 保存新文件名
  5. adb pull "/sdcard/1.txt" "G:\Desktop\A.txt"
复制代码
以下是自用代码分享
作者: went    时间: 2020-11-29 16:02

1.手机相册备份,DCIM文件夹,备份jpg和mp4文件
  1. @echo off
  2. REM adb工具包文件夹
  3. set "adbPath=G:\Phone\tool"
  4. REM 照片保存文件夹
  5. set "imgPath=G:\DCIM"
  6. REM 视频保存文件夹
  7. set "mp4Path=G:\video"
  8. set "path=%path%;%adbPath%"
  9. REM 检测设备
  10. adb devices | findstr /e /i "device" >nul 2>nul || ( adb devices & echo No Devices! & pause&exit )
  11. mkdir "%imgPath%" "%mp4Path%" >nul 2>nul
  12. REM 备份照片
  13. for /f "delims=" %%i in ('adb shell find /sdcard/dcim -name "*.jpg"') do (
  14. set /p "=pull %%i  "<nul
  15. if not exist "%imgPath%\%%~nxi" (
  16. adb pull "%%i" "%imgPath%\%%~nxi" >nul 2>nul
  17. echo done!
  18. ) else echo skip
  19. )
  20. REM 备份视频
  21. for /f "delims=" %%i in ('adb shell find /sdcard/dcim -name "*.mp4"') do (
  22. set /p "=pull %%i  "<nul
  23. if not exist "%mp4Path%\%%~nxi" (
  24. adb pull "%%i" "%mp4Path%\%%~nxi" >nul 2>nul
  25. echo done!
  26. ) else echo skip
  27. )
  28. pause&exit
复制代码

作者: went    时间: 2020-11-29 17:41

本帖最后由 went 于 2020-11-29 19:25 编辑

2.应用一键备份,多开即可实现多线程备份(65001代码页,脚本不能有中文)
     adbPath = ADB工具包文件夹(adb+aapt)
backupPath = apk备份文件夹
  1. @echo off & chcp 65001 & cls & cd /d "%~dp0"
  2. setlocal enabledelayedexpansion
  3. REM adb tool path
  4. set "adbPath=G:\Desktop\adb"
  5. REM backup path
  6. set "backupPath=G:\Desktop\apk"
  7. mkdir "%backupPath%" >nul 2>nul
  8. set "path=%path%;%adbPath%"
  9. REM counter
  10. set "count=0"
  11. for /f "tokens=1* delims=:" %%i in ('adb shell pm list package -3') do (
  12. set /a "count+=1"
  13. echo !count!:%%j
  14. set "versionCode=" & set "versionName=" & set "remotePath=" & set "chsName="
  15. REM get versionCode,versionName
  16. for /f "tokens=1,2 delims== " %%a in ('adb shell pm dump "%%j" ^| findstr /i "versionCode= versionName="') do (
  17. if /i "%%a"=="versionCode" set "versionCode=%%b"
  18. if /i "%%a"=="versionName" set "versionName=%%b"
  19. )
  20. set "localName=[%%j]-!versionCode!-V!versionName!.apk"
  21. REM get remotePath
  22. for /f "tokens=2 delims=:" %%a in ('adb shell pm path "%%j"') do set "remotePath=%%a"
  23. echo pulling ...
  24. REM pull apk
  25. if exist "%backupPath%\*!localName!" (
  26. REM if exist ,skip backup
  27. for %%a in ("%backupPath%\*!localName!") do echo skip %%a
  28. ) else (
  29. adb pull "!remotePath!" "%backupPath%\!localName!" >nul
  30. REM get chinese name
  31. for /f "tokens=2 delims=:'" %%a in ('aapt dump badging "%backupPath%\!localName!" ^| findstr /i "application-label:"') do set "chsName=%%a"
  32. REM rename
  33. if not "!chsName!"=="" move /y "%backupPath%\!localName!" "%backupPath%\!chsName!!localName!" >nul
  34. echo done. %backupPath%\!chsName!!localName!
  35. )
  36. echo --------------------------------------------------
  37. )
  38. echo backup done.
  39. pause&exit
复制代码

作者: went    时间: 2020-11-29 18:23

本帖最后由 went 于 2020-11-29 18:28 编辑

3.应用一键还原,全程静默安装,无须Root权限(65001代码页,脚本不能有中文)
     adbPath = ADB工具包文件夹
backupPath = apk安装包文件夹
    savePath = 手机保存apk的文件夹
  1. @echo off & chcp 65001 & cls & cd /d "%~dp0"
  2. setlocal enabledelayedexpansion
  3. REM adb tool path
  4. set "adbPath=G:\Desktop\adb"
  5. REM backup path
  6. set "backupPath=G:\Desktop\apk"
  7. REM save path
  8. set "savePath=/sdcard/apk"
  9. mkdir "%backupPath%" >nul 2>nul
  10. set "path=%path%;%adbPath%"
  11. REM counter
  12. set "count=0"
  13. for %%i in ("%backupPath%\*.apk") do (
  14. set /a "count+=1"
  15. echo !count!:%%~nxi
  16. REM check exist
  17. adb shell if [ -f '%savePath%/%%~nxi' ];then echo true;else echo false;fi | findstr /i "true" >nul 2>nul && (
  18. REM exist
  19. echo skip push
  20. ) || (
  21. REM not exist
  22. REM push to %savePath%
  23. echo pushing...
  24. adb push "%%i" "%savePath%/%%~nxi" >nul 2>nul
  25. echo push done.
  26. )
  27. REM copy apk to /data/local/tmp
  28. adb shell cp '%savePath%/%%~nxi' 'data/local/tmp'
  29. REM install apk
  30. echo install ...
  31. adb shell pm install 'data/local/tmp/%%~nxi'
  32. REM del temp apk
  33. adb shell rm -rR 'data/local/tmp/%%~nxi'
  34. echo ----------------------------------------------------
  35. )
  36. pause&exit
复制代码

作者: went    时间: 2020-11-30 20:41

4.解决手机无法弹出USB授权对话框
  1. @echo off
  2. REM 一键导入adb_keys
  3. adb devices | findstr /i /e "device" >nul 2>nul && (
  4. echo.
  5. echo. adb 连接正常 退出...
  6. echo.
  7. pause&exit
  8. )
  9. adb devices | findstr /i /e "unauthorized" >nul 2>nul && (
  10. echo.
  11. echo. adb 授权未成功,请手动进入recovery模式再次运行本程序
  12. echo.
  13. pause&exit
  14. )
  15. adb devices | findstr /i /e "recovery" >nul 2>nul && (
  16. echo.
  17. echo. recovery模式.
  18. echo.
  19. call :checkAdbKey
  20. echo. 开始推送公钥文件
  21. echo.
  22. adb shell mkdir "/data/misc/adb/" >nul 2>nul
  23. adb push "%USERPROFILE%\.android\adbkey.pub" "/data/misc/adb/adb_keys"
  24. echo.
  25. echo. 推送完成,按任意键重启手机.
  26. pause>nul
  27. adb reboot
  28. echo. 重启完成,按任意键退出.
  29. pause>nul
  30. exit
  31. )
  32. echo.
  33. echo. 没有设备连接
  34. echo.
  35. pause&exit
  36. :checkAdbKey
  37. if not exist "%USERPROFILE%\.android\adbkey.pub" (
  38. echo. 未找到 adbkey.pub 公钥文件
  39. echo.
  40. echo. 要生成adbkey.pub,请按任意键重启adb服务
  41. pause >nul
  42. echo.
  43. echo. 请稍后...
  44. echo.
  45. taskkill /im adb.exe /f >nul 2>nul
  46. adb start-server
  47. call :checkAdbKey
  48. ) else (
  49. echo.
  50. echo. 公钥文件:%USERPROFILE%\.android\adbkey.pub
  51. echo.
  52. goto :eof
  53. )
复制代码

作者: went    时间: 2022-10-18 21:04

5.备份应用数据 需要root权限
  1. @echo off & cd /d "%~dp0"
  2. REM 检查root权限
  3. adb shell su -c 'ls' 2>nul | findstr /be system >nul 2>nul || ( echo 无root权限 & pause&exit)
  4. REM 指定数据包保存文件夹和包名
  5. set "data_dir=data"
  6. set "pkg_name=com.tencent.mm"
  7. REM 命令设置
  8. set "adb_shell=adb shell"
  9. set "adb_shell_su=adb shell su -c"
  10. REM 路径设置
  11. mkdir "%data_dir%" 2>nul
  12. set "data1=sdcard/Android/data/%pkg_name%/"
  13. set "data2=data/data/%pkg_name%/"
  14. set "data_gz=/sdcard/%pkg_name%.gz"
  15. set "save_gz=data\%pkg_name%.gz"
  16. echo. 开始备份 %pkg_name%
  17. echo. 打包数据...
  18. %adb_shell_su% tar -czf "%data_gz%" "%data1%" "%data2%"
  19. echo. 备份数据...
  20. adb pull "%data_gz%" "%save_gz%"
  21. echo. 删除数据包...
  22. %adb_shell% rm -rR "%data_gz%"
  23. echo. 备份完成
  24. pause&exit
复制代码

作者: went    时间: 2022-10-18 21:05

6.恢复应用数据 需要root权限
  1. @echo off & cd /d "%~dp0"
  2. REM 检查root权限
  3. adb shell su -c 'ls' 2>nul | findstr /be system >nul 2>nul || ( echo 无root权限 & pause&exit)
  4. REM 指定数据包保存文件夹和包名
  5. set "data_dir=data"
  6. set "pkg_name=com.tencent.mm"
  7. REM 命令设置
  8. set "adb_shell=adb shell"
  9. set "adb_shell_su=adb shell su -c"
  10. REM 路径设置
  11. mkdir "%data_dir%" 2>nul
  12. set "data_gz=/sdcard/%pkg_name%.gz"
  13. set "save_gz=data\%pkg_name%.gz"
  14. echo. 推送数据包...
  15. if not exist "%save_gz%" (echo. 不存在%pkg_name%的备份 & pause&exit)
  16. adb push "%save_gz%" "%data_gz%"
  17. echo. 释放数据包
  18. %adb_shell% am force-stop %pkg_name%
  19. %adb_shell_su% tar -xzf "%data_gz%"
  20. echo. 设置权限
  21. for /f "tokens=3" %%i in ('%adb_shell% ls -l '/sdcard/Android/data' ^| findstr /e /C:" %pkg_name%"') do (
  22. echo. %%i
  23. %adb_shell_su% chown -hR %%i:%%i "/data/data/%pkg_name%"
  24. )
  25. echo. 删除数据包
  26. %adb_shell% rm -rR "%data_gz%"
  27. echo. 恢复成功
  28. pause&exit
复制代码

作者: lancer    时间: 2022-10-29 20:48

adb push和adb pull不支持中文路径和中文名,这个要说明一下。

楼主能找到修改版的adb么,支持中文路径的那种。
作者: 77七    时间: 2024-3-28 14:21

本帖最后由 77七 于 2024-3-28 14:31 编辑

因为安卓手机应用读取剪贴板,可能导致隐私泄露;应用内震动无法从应用内或者系统设置中关闭,特搜集了相关adb命令代码(代码比较基础,就不贴出处了),写成批处理自用,在此借楼分享一下给需要的朋友
本代码只写了 剪贴板、震动,可以自己尝试输入其它项目。因本人水平十分有限,疏忽、错误难免,代码仅供参考。

  1. @echo off
  2. rem 批处理保存为ansi编码格式
  3. :1
  4. adb devices |findstr /rec:"device" 1>nul
  5. if errorlevel 1 (
  6.         echo 请确保手机已经打开[允许USB调试] 并连接到电脑,按【回车键】再次尝试
  7.         pause
  8.         goto :1
  9. ) else (
  10.         echo 连接成功!
  11. )
  12. echo=
  13. echo 说明:
  14. echo  1.项目举例,剪贴板【READ_CLIPBOARD】震动【VIBRATE】
  15. echo  2.允许【allow】禁止【ignore】
  16. echo  3.均区分大小写
  17. echo=
  18. setlocal
  19. set /p c1=输入项目,如需要管理剪贴板权限,则输入READ_CLIPBOARD:
  20. set /p c2=输入操作,如需要禁止权限,则输入ignore:
  21. if "%c2%" equ "allow" (
  22.         set c3=ignore
  23. ) else (
  24.         set c3=allow
  25. )
  26. setlocal enabledelayedexpansion
  27. call :2 "%c1%" "%c2%" "%c3%"
  28. endlocal
  29. endlocal
  30. goto :1
  31.         :2
  32.         echo=
  33.         echo 当前 "%~3" 权限app
  34.         echo=
  35.         for /f "delims=" %%a in ('adb shell cmd appops query-op --user 0 %~1 %~3') do (
  36.                 set /a n+=1001
  37.                 echo [!n:~-3!] %%a
  38.                 set #!n:~-3!=%%a
  39.         )
  40.         if not defined n (
  41.                 echo 无符合条件的app
  42.                 exit /b
  43.         )
  44.         echo=
  45.         set /p c4=输入所有需要 "%~2" 的序号,以空格分隔:
  46.         echo=
  47.         for %%a in (%c4%) do (
  48.                 adb shell cmd appops set !#%%a! %~1 %~2
  49.                 rem 此命令成功失败无提示,请自行查看效果
  50.                 echo %~2 !#%%a! %~1 权限
  51.         )
  52.         echo=
  53.         echo 操作完成
  54.         echo=
  55.         echo=
  56.         exit /b
复制代码





欢迎光临 批处理之家 (http://bbs.bathome.net/) Powered by Discuz! 7.2