ADB導(dǎo)出文件腳本

@echo off
setlocal enabledelayedexpansion
title ADB導(dǎo)出文件腳本
color 0A
REM ========== 配置區(qū)域 ==========
set "default_file=log_large_data.txt"  REM 默認(rèn)文件名
set "common_dirs=/storage/emulated/0 /sdcard /data"  REM 常用搜索目錄
set "extended_dirs=/dev /sys /mnt /vendor /bin /etc /system"  REM 擴(kuò)展搜索目錄
set "desktop_path=%USERPROFILE%\Desktop"
set "timeout_seconds=10"
set "enable_full_search=1"  REM 是否啟用全盤(pán)搜索功能 (1=啟用, 0=禁用)
REM =============================

echo.
echo 正在執(zhí)行ADB文件搜索與拉取任務(wù)...
echo.

REM 檢查ADB是否可用
where adb >nul 2>nul
if %errorlevel% neq 0 (
    echo 錯(cuò)誤:未找到ADB命令,請(qǐng)確保:
    echo 1. Android SDK已安裝
    echo 2. ADB路徑已添加到系統(tǒng)環(huán)境變量
    echo.
    pause
    exit /b 1
)

REM 檢查設(shè)備連接
echo 正在檢測(cè)連接的Android設(shè)備...
adb devices | findstr /r /c:"^[^List].*device$" >nul
if %errorlevel% neq 0 (
    echo 錯(cuò)誤:未找到已授權(quán)的Android設(shè)備
    echo 請(qǐng)確保:
    echo 1. 設(shè)備已通過(guò)USB連接電腦
    echo 2. 已開(kāi)啟USB調(diào)試模式
    echo 3. 設(shè)備上已授權(quán)此電腦的調(diào)試請(qǐng)求
    echo.
    echo 將在%timeout_seconds%秒后重試...
    timeout /t %timeout_seconds% /nobreak >nul
    adb devices | findstr /r /c:"^[^List].*device$" >nul
    if %errorlevel% neq 0 (
        echo 錯(cuò)誤:設(shè)備連接失敗,請(qǐng)檢查后重試
        echo.
        pause
        exit /b 1
    )
)

REM 獲取用戶輸入的文件名
echo.
set /p "user_input=請(qǐng)輸入要搜索的文件名(支持模糊查詢,用英文單引號(hào)包裹進(jìn)行精確匹配,回車(chē)使用默認(rèn)文件 '%default_file%'): "

REM 處理用戶輸入
if "!user_input!"=="" (
    set "search_pattern=%default_file%"
    set "search_type=精確匹配"
) else (
    REM 檢查是否用單引號(hào)包裹(精確匹配)
    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 錯(cuò)誤:搜索模式為空,請(qǐng)重新輸入文件名
    pause
    exit /b 1
)

REM 搜索目標(biāo)文件 - 第一階段(常用目錄)
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 第二階段:擴(kuò)展目錄搜索(如果常用目錄沒(méi)找到)
if %file_count% equ 0 (
    echo.
    echo 未在常用目錄找到文件,正在擴(kuò)展目錄搜索...
    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 第三階段:全盤(pán)搜索(如果前兩個(gè)階段都沒(méi)找到)
if %enable_full_search% equ 1 if %file_count% equ 0 (
    echo.
    echo 未在擴(kuò)展目錄找到文件,是否進(jìn)行全盤(pán)搜索?
    echo 警告:全盤(pán)搜索可能需要較長(zhǎng)時(shí)間(1-5分鐘)
    set /p "full_search=是否繼續(xù)?(Y/N): "
    
    if /i "!full_search!"=="Y" (
        echo.
        echo 正在全盤(pán)搜索文件 [!search_type!]: !search_pattern!
        echo 搜索目錄: / (整個(gè)設(shè)備)
        echo.
        
        REM 全盤(pán)搜索(不進(jìn)行任何過(guò)濾)
        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 錯(cuò)誤:未找到匹配文件
    echo 搜索模式: !search_pattern! [!search_type!]
    echo 可能原因:
    echo 1. 文件名輸入錯(cuò)誤
    echo 2. 文件不在設(shè)備上
    echo 3. 設(shè)備存儲(chǔ)空間不足
    echo.
    pause
    exit /b 1
)

REM 如果找到多個(gè)文件,讓用戶選擇
if %file_count% gtr 1 (
    echo.
    set /p "file_index=找到多個(gè)匹配文件,請(qǐng)輸入要拉取的文件編號(hào) (1-%file_count%): "
    
    REM 驗(yàn)證輸入
    if !file_index! lss 1 (
        echo 錯(cuò)誤:輸入編號(hào)太小
        pause
        exit /b 1
    )
    if !file_index! gtr %file_count% (
        echo 錯(cuò)誤:輸入編號(hào)太大
        pause
        exit /b 1
    )
    
    REM 獲取選擇的文件路徑
    set "counter=0"
    
    REM 重新執(zhí)行搜索命令以獲取文件列表
    if %file_count% leq 10 (
        REM 如果是常用或擴(kuò)展目錄找到的文件
        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 如果是全盤(pán)搜索找到的文件
        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 獲取文件大小(設(shè)備端)
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! 字節(jié)
)

REM 確認(rèn)操作
echo.
set /p "confirm=是否繼續(xù)拉取文件?(Y/N): "
if /i not "!confirm!"=="Y" (
    echo 操作已取消
    echo.
    pause
    exit /b 0
)

REM 執(zhí)行文件拉取
echo.
echo 正在拉取文件到桌面...
adb pull "%device_file%" "%desktop_path%"

REM 結(jié)果處理
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 字節(jié)
    )
    
    echo.
    echo 任務(wù)完成!您可以:
    echo 1. 按任意鍵打開(kāi)桌面查看文件
    echo 2. 直接關(guān)閉窗口
    
    echo.
    pause
REM    echo 正在打開(kāi)桌面...
REM    start "" "%desktop_path%"
) else (
    echo.
    echo ========== 操作失敗 ==========
    echo × 文件拉取失??!錯(cuò)誤代碼:%errorlevel%
    echo 可能原因:
    echo 1. 設(shè)備斷開(kāi)連接
    echo 2. 文件傳輸中斷
    echo 3. 磁盤(pán)空間不足
    echo.
    pause
)

endlocal
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容