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

.bat批处理(七):PC端从手机内复制文件到本地

文章目录

  • 前言
  • 准备条件
  • 实现代码
  • 代码分析
  • 代码测试
    • 拷贝成功
    • 拷贝失败
  • 总结

前言

解决方案都是在实际工作中遇到问题时想出来解决方法,很多方法乍一看根本用不上,但实际操作中发现真的很有用,今天提到的这个方法就是这种类型的。

游戏开发中常常会将一些关键信息或者调试信息写入到日志文件中,这样可以在出现BUG的情况时,通过分析日志文件来进一步定位问题的原因,在真机上跑游戏时就需要将手机中的日志文件导出到电脑上,方便查看,这就是这篇文章所讲的内容。

可能有人会说,现在手机连接电脑很方便,直接插一根数据线,在“我的电脑”里找到手机,然后就可以像从其他文件夹复制一下,从手机中把文件复制下来,可事实上并不是这样的,手机连接电脑有个缓存的毛病。

这种问题就是第一次连接的时候查看文件是正常,但是复制删除几次文件以后就会出现缓存的现象,我明明新建了一个文件就是找不到,比如产生了新的日志文件,通过数据线连接电脑以后,在文件夹中看不到,这时可以通过adb命令复制出来,虽然看不到,但是文件是确实存在的。

准备条件

  1. 需要电脑安装adb,常用来调试手机的电脑一定会安装过这个东西,有些版本直接可以使用,具体怎么安装,网上的教程有很多。
  2. 手机需要打开USB调试模式,打开模式前可能需要开启开发者选项,同样开启USB调试的教程也有很多。

实现代码

@SET LOG_FILE_NAME=project_%date:~0,4%%date:~5,2%%date:~8,2%%time:~0,2%%time:~3,2%%time:~6,2%.log

adb pull /storage/emulated/0/project2.log ./%LOG_FILE_NAME%

@echo off
echo running result:
if %errorlevel%==0 goto endSuccess

:endFail
echo Copy data from phone to pc falied!!!
pause
exit /b 1

:endSuccess
echo Copy data from phone to pc success!!!
pause
exit /b 0

代码分析

其实这一大段中核心的代码只有一句adb pull /storage/emulated/0/project2.log ./%LOG_FILE_NAME%,之前的变量LOG_FILE_NAME是为了解决多次导出文件时同名会覆盖的问题,加上时间字符串可以防止重名出现,adb pull 手机中路径+文件名 本地PC路径+文件名就是实际复制的过程

如果复制过程中不报错就会走到:endSuccess代码段,如果报错就会走到:endFail代码段,两段代码会返回不同的值供调用者判断,整个代码文件加了一些提示消息,如果嫌麻烦的话直接使用adb pull /storage/emulated/0/project2.log ./%LOG_FILE_NAME%也是可以的。

代码测试

直接在cmd命令行中运行就可以,假设以上的bat文件名为CopydataPhone2PC.bat,手机根目录下有文件project.log,我们可以尝试拷贝project.log和project2.log两个文件到手机看看效果,当然project2.log文件是不存在的肯定会失败

拷贝成功

E:\batTool>CopydataPhone2PC.bat

E:\batTool>adb pull /storage/emulated/0/project.log ./project_20190822102324.log
124 KB/s (1284 bytes in 0.010s)
running result:
Copy data from phone to pc success!!!
请按任意键继续. . .

拷贝失败

E:\batTool>CopydataPhone2PC.bat

E:\batTool>adb pull /storage/emulated/0/project2.log ./project_20190822102422.log
remote object '/storage/emulated/0/project2.log' does not exist
running result:
Copy data from phone to pc falied!!!
请按任意键继续. . .

总结

有些领域真的很奇妙,如果你之前没有接触过,直接告诉你,手机里有个很普通的文件,但是你就是看不到,你会不会觉得很奇怪,针对于这些奇怪的问题其实别人可能早就有了解决方案,百思不得其解时不妨浏览一下。

相关文章:

  • windows环境下C++代码打印函数堆栈调用情况
  • linux环境下C++代码打印函数堆栈调用情况
  • Mysql中查询当前用户、当前数据库等基础信息
  • Python切割超大日志文件、保留文件最后几行
  • Python使用scatter函数绘制点在线的上层
  • gdb调试程序时跳进函数和跳出函数
  • .bat批处理(八):各种形式的变量%0、%i、%%i、var、%var%、!var!的含义和区别
  • Mysql中Blob类型字段的插入、查看、截取和拼接
  • Mysql导入数据库时报错ERROR: Unknown command '\0'
  • MySQL中全局变量、会话变量、用户变量和局部变量的区别
  • C++ STL中map的[]操作符使用时的一个坑
  • 单继承、多继承、菱形继承的虚函数表
  • 2019!一份迟到的年终总结
  • 2020年的春节,我们一起抗击新型冠状病毒
  • 利用__declspec(dllexport)和__declspec(dllimport)在Windows平台编写和使用DLL的小例子
  • Angular Elements 及其运作原理
  • iOS编译提示和导航提示
  • Laravel 中的一个后期静态绑定
  • SpiderData 2019年2月13日 DApp数据排行榜
  • vue--为什么data属性必须是一个函数
  • vue自定义指令实现v-tap插件
  • 第2章 网络文档
  • 技术攻略】php设计模式(一):简介及创建型模式
  • 想使用 MongoDB ,你应该了解这8个方面!
  • 新版博客前端前瞻
  • 赢得Docker挑战最佳实践
  • - 语言经验 - 《c++的高性能内存管理库tcmalloc和jemalloc》
  • 再谈express与koa的对比
  • 深度学习之轻量级神经网络在TWS蓝牙音频处理器上的部署
  • #Linux(权限管理)
  • #基础#使用Jupyter进行Notebook的转换 .ipynb文件导出为.md文件
  • (java)关于Thread的挂起和恢复
  • (react踩过的坑)antd 如何同时获取一个select 的value和 label值
  • (附源码)springboot“微印象”在线打印预约系统 毕业设计 061642
  • (附源码)ssm失物招领系统 毕业设计 182317
  • (十六)串口UART
  • (五) 一起学 Unix 环境高级编程 (APUE) 之 进程环境
  • (五)大数据实战——使用模板虚拟机实现hadoop集群虚拟机克隆及网络相关配置
  • (轉貼) 蒼井そら挑戰筋肉擂台 (Misc)
  • .Net MVC4 上传大文件,并保存表单
  • .NET Reactor简单使用教程
  • .net 开发怎么实现前后端分离_前后端分离:分离式开发和一体式发布
  • .NET 中 GetHashCode 的哈希值有多大概率会相同(哈希碰撞)
  • .Net程序帮助文档制作
  • .NET开发不可不知、不可不用的辅助类(三)(报表导出---终结版)
  • 。Net下Windows服务程序开发疑惑
  • [ C++ ] STL---仿函数与priority_queue
  • [.NET 即时通信SignalR] 认识SignalR (一)
  • [17]JAVAEE-HTTP协议
  • [C/C++]_[初级]_[关于编译时出现有符号-无符号不匹配的警告-sizeof使用注意事项]
  • [CSS]浮动
  • [C语言]——分支和循环(4)
  • [Firefly-Linux] RK3568修改控制台DEBUG为普通串口UART
  • [JS入门到进阶] 哎,被vite小坑了一波,大家记得配置build.cssTarget为‘chrome61‘
  • [JS真好玩] 掘金创作者必备: 监控每天是谁取关了你?