@echo off
setlocal enabledelayedexpansion
title ADB导出文件脚本
color 0A
REM ========== 配置区域 ==========
set "default_file=log_large_data.txt" REM 默认文件名
set "common_dirs=/storage/emulated/0 /sdcard /data" REM 常用搜索目录
set "extended_dirs=/dev /sys /mnt /vendor /bin /etc /system" REM 扩展搜索目录
set "desktop_path=%USERPROFILE%\Desktop"
set "timeout_seconds=10"
set "enable_full_search=1" REM 是否启用全盘搜索功能 (1=启用, 0=禁用)
REM =============================
echo.
echo 正在执行ADB文件搜索与拉取任务...
echo.
REM 检查ADB是否可用
where adb >nul 2>nul
if %errorlevel% neq 0 (
echo 错误:未找到ADB命令,请确保:
echo 1. Android SDK已安装
echo 2. ADB路径已添加到系统环境变量
echo.
pause
exit /b 1
)
REM 检查设备连接
echo 正在检测连接的Android设备...
adb devices | findstr /r /c:"^[^List].*device$" >nul
if %errorlevel% neq 0 (
echo 错误:未找到已授权的Android设备
echo 请确保:
echo 1. 设备已通过USB连接电脑
echo 2. 已开启USB调试模式
echo 3. 设备上已授权此电脑的调试请求
echo.
echo 将在%timeout_seconds%秒后重试...
timeout /t %timeout_seconds% /nobreak >nul
adb devices | findstr /r /c:"^[^List].*device$" >nul
if %errorlevel% neq 0 (
echo 错误:设备连接失败,请检查后重试
echo.
pause
exit /b 1
)
)
REM 获取用户输入的文件名
echo.
set /p "user_input=请输入要搜索的文件名(支持模糊查询,用英文单引号包裹进行精确匹配,回车使用默认文件 '%default_file%'): "
REM 处理用户输入
if "!user_input!"=="" (
set "search_pattern=%default_file%"
set "search_type=精确匹配"
) else (
REM 检查是否用单引号包裹(精确匹配)
if "!user_input:~0,1!!user_input:~-1!"=="''" (
REM 精确匹配模式
set "search_pattern=!user_input:~1,-1!"
set "search_type=精确匹配"
) else (
REM 模糊匹配模式
set "search_pattern=*!user_input!*"
set "search_type=模糊匹配"
)
)
REM 确保搜索模式不为空
if "!search_pattern!"=="" (
echo 错误:搜索模式为空,请重新输入文件名
pause
exit /b 1
)
REM 搜索目标文件 - 第一阶段(常用目录)
echo.
echo 正在常用目录搜索文件 [!search_type!]: !search_pattern!
echo 搜索目录: %common_dirs%
echo.
set "device_file="
set "file_count=0"
REM 使用find命令搜索文件
for /f "tokens=*" %%i in ('adb shell find %common_dirs% -type f -name "!search_pattern!" 2^>nul') do (
set /a "file_count+=1"
set "device_file=%%i"
echo 找到文件 [!file_count!]: %%i
)
REM 第二阶段:扩展目录搜索(如果常用目录没找到)
if %file_count% equ 0 (
echo.
echo 未在常用目录找到文件,正在扩展目录搜索...
echo 搜索目录: %extended_dirs%
echo.
for /f "tokens=*" %%i in ('adb shell find %extended_dirs% -type f -name "!search_pattern!" 2^>nul') do (
set /a "file_count+=1"
set "device_file=%%i"
echo 找到文件 [!file_count!]: %%i
)
)
REM 第三阶段:全盘搜索(如果前两个阶段都没找到)
if %enable_full_search% equ 1 if %file_count% equ 0 (
echo.
echo 未在扩展目录找到文件,是否进行全盘搜索?
echo 警告:全盘搜索可能需要较长时间(1-5分钟)
set /p "full_search=是否继续?(Y/N): "
if /i "!full_search!"=="Y" (
echo.
echo 正在全盘搜索文件 [!search_type!]: !search_pattern!
echo 搜索目录: / (整个设备)
echo.
REM 全盘搜索(不进行任何过滤)
for /f "tokens=*" %%i in ('adb shell find / -type f -name "!search_pattern!" 2^>nul') do (
set /a "file_count+=1"
set "device_file=%%i"
echo 找到文件 [!file_count!]: %%i
)
)
)
if %file_count% equ 0 (
echo.
echo 错误:未找到匹配文件
echo 搜索模式: !search_pattern! [!search_type!]
echo 可能原因:
echo 1. 文件名输入错误
echo 2. 文件不在设备上
echo 3. 设备存储空间不足
echo.
pause
exit /b 1
)
REM 如果找到多个文件,让用户选择
if %file_count% gtr 1 (
echo.
set /p "file_index=找到多个匹配文件,请输入要拉取的文件编号 (1-%file_count%): "
REM 验证输入
if !file_index! lss 1 (
echo 错误:输入编号太小
pause
exit /b 1
)
if !file_index! gtr %file_count% (
echo 错误:输入编号太大
pause
exit /b 1
)
REM 获取选择的文件路径
set "counter=0"
REM 重新执行搜索命令以获取文件列表
if %file_count% leq 10 (
REM 如果是常用或扩展目录找到的文件
for /f "tokens=*" %%i in ('adb shell find %common_dirs% %extended_dirs% -type f -name "!search_pattern!" 2^>nul') do (
set /a "counter+=1"
if !counter! equ !file_index! (
set "device_file=%%i"
)
)
) else (
REM 如果是全盘搜索找到的文件
for /f "tokens=*" %%i in ('adb shell find / -type f -name "!search_pattern!" 2^>nul') do (
set /a "counter+=1"
if !counter! equ !file_index! (
set "device_file=%%i"
)
)
)
)
echo.
echo 已选择文件: %device_file%
echo.
REM 获取文件大小(设备端)
echo 正在获取文件信息...
for /f "tokens=*" %%i in ('adb shell stat -c "%%s" "%device_file%" 2^>nul') do set "file_size=%%i"
if "!file_size!"=="" (
for /f "tokens=*" %%i in ('adb shell ls -l "%device_file%" 2^>nul ^| awk "{print \$5}"') do set "file_size=%%i"
)
REM 显示文件信息
echo 文件信息:
echo 路径:%device_file%
if not "!file_size!"=="" (
echo 大小:!file_size! 字节
)
REM 确认操作
echo.
set /p "confirm=是否继续拉取文件?(Y/N): "
if /i not "!confirm!"=="Y" (
echo 操作已取消
echo.
pause
exit /b 0
)
REM 执行文件拉取
echo.
echo 正在拉取文件到桌面...
adb pull "%device_file%" "%desktop_path%"
REM 结果处理
if %errorlevel% equ 0 (
echo.
echo ========== 操作成功 ==========
echo √ 文件拉取成功!
REM 获取本地文件名
for %%F in ("%device_file%") do set "local_file=%%~nxF"
echo 保存位置:%desktop_path%\!local_file!
REM 显示本地文件大小
for %%F in ("%desktop_path%\!local_file!") do (
echo 文件大小:%%~zF 字节
)
echo.
echo 任务完成!您可以:
echo 1. 按任意键打开桌面查看文件
echo 2. 直接关闭窗口
echo.
pause
REM echo 正在打开桌面...
REM start "" "%desktop_path%"
) else (
echo.
echo ========== 操作失败 ==========
echo × 文件拉取失败!错误代码:%errorlevel%
echo 可能原因:
echo 1. 设备断开连接
echo 2. 文件传输中断
echo 3. 磁盘空间不足
echo.
pause
)
endlocal
ADB导出文件脚本
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
相关阅读更多精彩内容
- 1、下载插件 2、样式 3、自定义 scripts/global.js 文件 参考 https://blog.cs...
- Vue前端导出文件: 后端传回前端的是文件流 前端上传文件 效果图: 所用到的部分参数: http-request...
- 在多可软件的文件夹里有很多文件,要是能导出文件清单就好了。这样就能知道这个文件夹里有哪些文件,这些文件是谁在什么时...