Windows 11 PowerShell中如何用ADB通配符批量复制Android文件?
在Windows 11 PowerShell中用adb批量拉取Android设备的JSON文件
问题原因
在Linux/macOS的bash/zsh等环境中,*.json这类通配符会被本地shell先解析为实际的文件名列表,再传递给adb;但Windows PowerShell不会自动做这个解析,而是直接把*.json作为字符串发送给adb,导致adb在Android设备上查找名为*.json的文件,自然找不到,从而报错。
解决方案
以下是几种可行的批量拉取方法:
方法1:用adb shell的ls过滤文件名后批量拉取
利用Android设备的shell解析通配符,获取所有JSON文件的列表,再在PowerShell中遍历拉取:
# 只输出JSON文件名(-1参数让ls每行返回一个文件名) .\adb.exe shell ls -1 /sdcard/*.json | ForEach-Object { .\adb.exe pull "/sdcard/$_" }
方法2:用tar打包后传输(高效适配大量文件)
如果设备自带tar命令(现代Android基本都预装),可以先在设备上打包所有JSON文件,再传输到本地解压,这种方式比逐个拉取效率高很多:
# 打包设备上的JSON文件并传输到本地,直接解压到指定目录 .\adb.exe exec-out 'tar -czf - /sdcard/*.json' | Expand-Archive -DestinationPath .\json-files -Force
- 说明:
exec-out让adb把设备shell的输出直接传到本地,tar -czf -表示将文件打包成gzip压缩包并输出到标准输出,本地用Expand-Archive解压到./json-files目录。
方法3:拉取整个目录(若不在意其他文件)
如果/sdcard/下的其他文件也可以一起拉取,直接拉取整个目录是最简单的方式:
.\adb.exe pull /sdcard/ ./local-sdcard-backup
此命令会将设备/sdcard/下的所有文件和子目录复制到本地的local-sdcard-backup文件夹中。
方法4:用find命令精准筛选文件
如果需要更复杂的筛选条件(比如按文件修改时间筛选),可以用find命令生成文件列表再拉取:
# 生成所有JSON文件的完整路径列表到本地文件 .\adb.exe shell find /sdcard -type f -name "*.json" > json-files.txt # 遍历列表拉取每个文件 Get-Content json-files.txt | ForEach-Object { .\adb.exe pull $_ }
内容的提问来源于stack exchange,提问作者Leszek
相关产品推荐
相关产品推荐

