@ECHO OFF
@SETLOCAL enabledelayedexpansion
ECHO Motorola Mobility flashall script version 1.9
:: always use fastboot that come with the package
SET fastboot=.\Windows\fastboot.exe
SET config=.\config
::
:: command line options to override the defaults
:: useful for factory software preparation
::
SET flash_userdata=0
SET erase_userdata=1
SET erase_cache=1
SET para_flash=0
SET serial_number=
SET device_list=
SET device_count=0
SET opts=
SET flash_script=%0
SET is_device_in_productlist=0
SET no_reboot=0
IF not exist %config% (
ECHO. NO FRP image found under current folder.
PAUSE
EXIT /b 1
)
::
:: Start flashing
::
:start_flashing
SET flash_userdata=0
:: not to erase userdata if we are flashing it
:: because bootloader erases the partition before
:: flashing it
:: IF %flash_userdata% == 1 SET erase_userdata=0
ECHO.
ECHO. Flashing Options:
ECHO. - erase userdata: %erase_userdata%
ECHO. - erase cache: %erase_cache%
ECHO.
:: Wait for fastboot device enumeration
ECHO.
ECHO. Waiting for fastboot enumeration...
ECHO.
CALL :enumerate_all_devices
IF %errorlevel% NEQ 0 EXIT /b 1
ECHO. There are %device_count% device(s) connected: %device_list%
IF %device_count% == 1 (
SET /A para_flash=0
)
IF NOT "%serial_number%" == "" (
CALL :flash_one_device
IF %errorlevel% NEQ 0 EXIT /b 1
) else (
FOR %%D in (%device_list::= %) do (
ECHO. Trying to flash device %%D
IF %para_flash% == 0 (
CALL SET serial_number=%%D
CALL :flash_one_device
) else (
start cmd /k Call %flash_script% %opts% /s /d %%D
)
)
)
ECHO. All devices are flashed!
PAUSE
EXIT /b 0
:: ------------------------------------------------------------------------
:: Functions start here
:: ------------------------------------------------------------------------
:flash_one_device:
IF "%serial_number%" == "" (
ECHO. No device specified
EXIT /b 1
)
:: Check whether the phone is connected
CALL SET replaced=%%device_list:%serial_number%=%%
IF "%replaced%" == "%device_list%" (
ECHO. Device %serial_number% is not connected
EXIT /b 1
)
ECHO.
ECHO. Starting flashing device %serial_number%...
ECHO.
CALL :fastboot_flash config %config%
::IF %errorlevel% NEQ 0 EXIT /b 1
:: Erase userdata?
:erase_userdata
IF %erase_userdata% == 1 (
GOTO :do_erase_userdata
)
GOTO :erase_cache
:do_erase_userdata
ECHO. Erasing userdata...
CALL :fastboot_erase userdata
IF %errorlevel% NEQ 0 EXIT /b 1
:: Erase cache?
:erase_cache
IF %erase_cache% == 1 (
GOTO :do_erase_cache
)
GOTO :flash_userdata
:do_erase_cache
ECHO. Erasing cache
CALL :fastboot_erase cache
IF %errorlevel% NEQ 0 EXIT /b 1
:: Flash userdata?
:flash_userdata
IF %flash_userdata% == 1 (
GOTO :do_flash_userdata
)
GOTO :all_done
:do_flash_userdata
ECHO. Flashing userdata...
CALL :fastboot_erase_flash userdata userdata.img
IF %errorlevel% NEQ 0 EXIT /b 1
:all_done
ECHO.
ECHO. FRP image flashed successfully!
:: check if the device is flashed with factory software
for /f "delims=" %%X in ('%fastboot% getvar ro.build.fingerprint %~1 %~2 2^>^&1') do (
set fingerprint=!fingerprint! %%X
)
ECHO. %fingerprint% | findstr /C:"factory">nul && (
ECHO [WARNING] FACTORY SOFTWARE LOADED.
ECHO PLEASE ERASE USERDATA
ECHO use "fastboot erase userdata" command to erase userdata
timeout /t 5
)
IF %no_reboot% == 0 (
ECHO. Rebooting device...
ECHO.
%fastboot% -s %serial_number% reboot
)
EXIT /b 0
:show_usage
ECHO.
ECHO. Flashes frp image with fastboot
ECHO.
ECHO. flashfrp [frp image]
ECHO.
EXIT /b 0
:enumerate_all_devices
SET /A wait_time=1
SET /A ret=0
:loop
FOR /F "usebackq tokens=1" %%X in (`%fastboot% devices`) do (
IF NOT "%%X" == "" (
SET /A device_count+=1
SET device_list=!device_list! %%X
)
)
IF "%device_list%" == "" (
ping -n 2 127.0.0.1 > NUL
SET /A wait_time+=1
IF %wait_time% == 10 (
ECHO. Not found any devices connected. Please check and try again.
ECHO.
SET /A ret=1
GOTO :exit_enumeration
)
GOTO :loop
)
IF NOT "%serial_number%" == "" (
:: Check whether the phone is connected
CALL SET replaced=%%device_list:%serial_number%=%%
IF "%replaced%" == "%device_list%" (
ECHO. Device %serial_number% is not connected
EXIT /b 1
)
)
ECHO. Fastboot device is ready!!
:exit_enumeration
EXIT /b %ret%
:fastboot_erase_flash
::ECHO. Executing "%fastboot% -s %serial_number% erase %~1"
::%fastboot% -s %serial_number% erase %~1
::IF %errorlevel% NEQ 0 EXIT /b 1
ECHO. Executing %fastboot% -s %serial_number% flash %~1 %~2"
%fastboot% -s %serial_number% flash %~1 %~2
IF %errorlevel% NEQ 0 EXIT /b 1
ECHO.
EXIT /b 0
:fastboot_flash
ECHO. Executing "%fastboot% -s %serial_number% flash %~1 %~2"
%fastboot% -s %serial_number% flash %~1 %~2
IF %errorlevel% NEQ 0 EXIT /b 1
ECHO.
EXIT /b 0
:fastboot_reboot_bl
ECHO. Executing %fastboot% -s %serial_number% reboot-bootloader
%fastboot% -s %serial_number% reboot-bootloader
IF %errorlevel% NEQ 0 EXIT /b 1
: to allow time for fastboot de-enumeration before continuing
ping -n 5 127.0.0.1 > NUL
EXIT /b 0
:fastboot_erase
ECHO. Executing "%fastboot% -s %serial_number% erase %~1"
%fastboot% -s %serial_number% erase %~1
IF %errorlevel% NEQ 0 EXIT /b 1
ECHO.
ENDLOCAL
EXIT /b 0