adb获取手机文件
参考视频:https://www.bilibili.com/video/BV1V8411C71r
adb的SDK 平台工具下载:https://developer.android.com/tools/releases/platform-tools?hl=zh-cn
下载下来文件名为:platform-tools.zip
这个简单的命令只使用了三个文件:
adb.exe
AdbWinApi.dll
AdbWinUsbApi.dll
过程在chatgpt有
直接使用adb命令不知道为什么找不到路径,所以先进入adb shell,下面命令找不到路径
adb shell "find /sdcard/ -type f \( -name '*.jpg' -o -name '*.png' -o -name '*.jpeg' -o -name '*.gif' -o -name '*.raw' \)" > /sdcard/files.txt
操作步骤:
adb devices
打开adb shell:
adb shell
用来查找对应后缀文件并生成目录文件的shell命令:
find /sdcard/ -type f \( -name '*.jpg' -o -name '*.png' -o -name '*.jpeg' -o -name '*.gif' -o -name '*.mp4' -o -name '*.raw' \) > /sdcard/files.txt
退出adb shell:
exit
将目录文件传到电脑
adb pull /sdcard/files.txt .
最简单的:(但有问题,不推荐使用)
for /f "delims=" %i in (files.txt) do adb pull "%i" "C:\pic"
注意:files.txt文件转码成ASCII格式
完整的命令,重复名字的文件加时间戳:
test06.bat
::使用时间戳,避免了重复命名的冲突
@echo off
setlocal enabledelayedexpansion
set SOURCE_FILE=files.txt
set TARGET_DIR=C:\testpic
set ERROR_LOG=error_log.txt
if not exist "%TARGET_DIR%" mkdir "%TARGET_DIR%"
if not exist "%ERROR_LOG%" type nul > "%ERROR_LOG%"
for /f "delims=" %%i in (%SOURCE_FILE%) do (
set FILE_NAME=%%~ni
set EXTENSION=%%~xi
set TARGET_PATH="%TARGET_DIR%\!FILE_NAME!!EXTENSION!"
rem Check if the file already exists in the target directory
if exist !TARGET_PATH! (
::不足两位的补足
set TIMESTAMP=!TIME: =0!
::去掉时间戳里的.和:
set TIMESTAMP=!TIMESTAMP:.=!
set TIMESTAMP=!TIMESTAMP::=!
set TARGET_PATH="%TARGET_DIR%\!FILE_NAME!_!TIMESTAMP!!EXTENSION!"
)
rem Execute adb pull command
adb pull "%%i" !TARGET_PATH!
rem Check the adb pull result
if errorlevel 1 (
rem If adb pull fails, log the command and error to the error log
echo adb pull "%%i" >> "%ERROR_LOG%"
echo ADB Error: failed to pull "%%i". >> "%ERROR_LOG%"
)
)
endlocal
没成功复制的命令在error_log.txt文件
后缀大小写:
在默认情况下,Android的文件系统是基于Linux的,对于文件名和文件后缀来说,它们是大小写敏感的。
在find命令中,-iname选项用于不区分文件名大小写进行匹配,但它不会影响文件后缀的大小写敏感性。也就是说,-iname只影响文件名的匹配,不影响文件后缀的匹配。
所以,如果您使用-iname来查找文件,文件名将不区分大小写,但文件后缀仍然是区分大小写的。如果需要不区分大小写的文件后缀匹配,您可能需要在匹配时考虑多个可能的大小写组合。
需要单独再写个各种大小写组合的后缀名,然后帮忙改成都小写的,再和之前的合并在一起
不过这些貌似不用手动操作,让程序操作就行,
具体步骤:
找到adb.exe目录启动cmd
连接手机,手机启用调试
adb devices
打开adb shell
adb shell
生成文件files.txt
图片视频获取***
find /sdcard/ -type f \( -name '*.jpg' -o -name '*.png' -o -name '*.jpeg' -o -name '*.gif' -o -name '*.raw' \) > /sdcard/files.txt
补充与修正:添加了更多的图片后缀,并且使用iname替代name,使得对后缀大小写不敏感
find /sdcard/ -type f \( -iname '*.jpg' -o -iname '*.jpeg' -o -iname '*.png' -o -iname '*.gif' -o -iname '*.bmp' -o -iname '*.tiff' -o -iname '*.webp' -o -iname '*.apng' -o -iname '*.png8' -o -iname '*.svg' -o -iname '*.raw' \) > /sdcard/files.txt
将在手机上生成的files.txt文件复制到电脑上,在cmd下
adb pull /sdcard/files.txt ./pic_files.txt
视频获取***
find /sdcard/ -type f \( -name '*.avi' -o -name '*.mp4' -o -name '*.mkv' -o -name '*.mov' -o -name '*.wmv' \) > /sdcard/files.txt
补充与修正:添加了更多的视频后缀,并且使用iname替代name,使得对后缀大小写不敏感
find /sdcard/ -type f \( -iname '*.avi' -o -iname '*.mp4' -o -iname '*.mkv' -o -iname '*.mov' -o -iname '*.wmv' -o -iname '*.flv' -o -iname '*.webm' -o -iname '*.ts' -o -iname '*.m4v' -o -iname '*.3gp' -o -iname '*.3g2' \) > /sdcard/files.txt
将在手机上生成的files.txt文件复制到电脑上,在cmd下
adb pull /sdcard/files.txt ./vid_files.txt
文档获取***
find /sdcard/ -type f \( -name '*.pdf' -o -name '*.txt' -o -name '*.md' -o -name '*.doc' -o -name '*.docx' -o -name '*.xls' -o -name '*.xlsx' -o -name '*.ppt' -o -name '*.pptx' -o -name '*.epub' -o -name '*.mobi' \) > /sdcard/files.txt
补充与修正:使用iname替代name,使得对后缀大小写不敏感
find /sdcard/ -type f \( -iname '*.pdf' -o -iname '*.txt' -o -iname '*.md' -o -iname '*.doc' -o -iname '*.docx' -o -iname '*.xls' -o -iname '*.xlsx' -o -iname '*.ppt' -o -iname '*.pptx' -o -iname '*.epub' -o -iname '*.mobi' \) > /sdcard/files.txt
将在手机上生成的files.txt文件复制到电脑上,在cmd下
adb pull /sdcard/files.txt ./doc_files.txt
音频获取
find /sdcard/ -type f \( -name '*.mp3' -o -name '*.m4a' -o -name '*.wav' -o -name '*.wma' \) > /sdcard/files.txt
手机录音是.m4a
补充与修正:使用iname替代name,使得对后缀大小写不敏感
find /sdcard/ -type f \( -iname '*.mp3' -o -iname '*.m4a' -o -iname '*.wav' -o -iname '*.wma' \) > /sdcard/files.txt
将在手机上生成的files.txt文件复制到电脑上,在cmd下
adb pull /sdcard/files.txt ./aud_files.txt
退出adb shell
exit
移动files.txt到电脑
adb pull /sdcard/files.txt .
删除手机上的files.txt
adb shell
rm /sdcard/files.txt
exit
files.txt转码成ASCII(有问题,会乱码)
最终方案为使用notepad++手动点击编码转换
新建文件 转为ANSI编码.bat ,编码为ANSI,不然会乱码
转为ANSI编码.bat
@echo off
setlocal enabledelayedexpansion
:: 检查是否通过拖放传递了文件
if "%~1"=="" (
echo 请将txt文件拖放到此批处理文件上。
pause
goto :eof
)
:: 检查是否为txt文件
if not "%~x1"==".txt" (
echo 仅支持txt文件。
pause
goto :eof
)
:: 设置源文件和目标文件路径
set "sourceFile=%~1"
:: 输出增加后缀_ansi的文件
:: set "targetFile=%~dpn1_ansi%~x1"
:: 输出同名文件覆盖原文件
set "targetFile=%~dpn1%~x1"
:: 调用PowerShell脚本来转换编码
powershell -Command "$sourceFile='%sourceFile%'; $targetFile='%targetFile%'; $content = Get-Content -Path $sourceFile -Encoding UTF8; [System.IO.File]::WriteAllLines($targetFile, $content, [System.Text.Encoding]::Default)"
echo 编码转换完成。转换后的文件已保存为:%targetFile%
pause
使用
将文件直接拖拽到此bat上
双击此bat打开,拖拽文件到打开的cmd窗口
作用
将UTF-8编码的txt转换为ANSI编码
原理
使用powershell
开始转移
::使用时间戳,避免了重复命名的冲突
@echo off
setlocal enabledelayedexpansion
set SOURCE_FILE=files.txt
set TARGET_DIR=C:\testpic
set ERROR_LOG=error_log.txt
if not exist "%TARGET_DIR%" mkdir "%TARGET_DIR%"
if not exist "%ERROR_LOG%" type nul > "%ERROR_LOG%"
for /f "delims=" %%i in (%SOURCE_FILE%) do (
set FILE_NAME=%%~ni
set EXTENSION=%%~xi
set TARGET_PATH="%TARGET_DIR%\!FILE_NAME!!EXTENSION!"
rem Check if the file already exists in the target directory
if exist !TARGET_PATH! (
::不足两位的补足
set TIMESTAMP=!TIME: =0!
::去掉时间戳里的.和:
set TIMESTAMP=!TIMESTAMP:.=!
set TIMESTAMP=!TIMESTAMP::=!
set TARGET_PATH="%TARGET_DIR%\!FILE_NAME!_!TIMESTAMP!!EXTENSION!"
)
rem Execute adb pull command
adb pull "%%i" !TARGET_PATH!
rem Check the adb pull result
if errorlevel 1 (
rem If adb pull fails, log the command and error to the error log
echo adb pull "%%i" >> "%ERROR_LOG%"
echo ADB Error: failed to pull "%%i". >> "%ERROR_LOG%"
)
)
endlocal
删除
现将文件转化成utf-8格式
将files.txt上传到手机/sdcard/目录下
adb push doc_files.txt /sdcard/files.txt
执行shell命令
adb shell
while read file; do rm "$file"; done < /sdcard/files.txt
exit
在cmd中显示的是执行错误的,没错误就不显示
删除进度
现在删除了vid_files.txt路径下所有,doc_files.txt【小说】部分