windows批处理是DOS时代的产物,现在已经很少人用了,以前的一些病毒高手,一些装机工具都在使用它。最近公司生产的安卓机器用QPST烧写,老是会出现蓝屏,死机,设备管理器有黄色感叹号,严重影响机器烧写速度,我们不是生产手机的,没那么大量,所以不是那种直接机器烧FLASH的,而是用USB烧写的。我们平时开发都是在cmd中用fastboot烧写的,所以就试着用windows批处理脚本完成了一键烧写工作(其实很多安卓开发者就是这么干的,比如boot.img和system.img,但是生产就得全烧,还得做出错处理),烧什么分区,什么文件是由rawprogram0.xml决定的(因为QPST烧写就是依赖这些配置文件的),经尝试可以的哈!
10分钟就会写批处理,这个就是个辅助工作,不要什么都去看,浪费精力,需要什么命令就查什么,现学现用,我就是这样。对于简单的使用,其实也没什么技术含量,称不上编程,能力自然不比C语言,类似shell,实质就是将系统可执行程序命令和第三方程序命令一条条的执行,当然还是有逻辑和分支流程的,这样的命令组合还是能发挥很大的作用的。
脚本命令有太多的语法说明我就不写了,好多人博客都有,我贴上我查阅的部分连接。然后就当做个记录吧!
http://www.bathome.net/ 批处理之家
http://blog.163.com/z_tianshi/blog/static/13019688220108287534938/ WINDOWS批处理命令
需求:
1. 安卓机器需要安装上adb驱动,
2. 在C:\WINDOWS\system32放入adb和fastboot工具
3. 将BURN_D500.CMD放入待烧写镜像的目录
不上语法直接上完成的部分批处理样例:BURN_D500.CMD (后缀为BAT和CMD都行,且不区分名字的大小写)
@ECHO OFF
REM 默认绿色字符 黑色背景;烧录过程出错,会以变为红色字符警告
color 0A
SET ADB_TMP_FILE=adb_tmp_.txt
SET CMD_TMP_FILE=cmd_tmp_.txt
title 物联网移动终端烧录工具
@echo 前提:必须先进入bootloader模式才能运行本脚本!
@echo 注意: 如遇到错误,字体都会变为红色!
@echo .
@echo ==============================
@echo 【物联网移动终端烧录工具】
@echo 当前支持型号:
@echo ==============================
@echo .
@echo 待烧写镜像所在目录 %~dp0
:start
ECHO .
ECHO ______________________
ECHO 步骤一:检测设备。。。
ECHO .
fastboot devices >%ADB_TMP_FILE%
@findstr "fastboot" %ADB_TMP_FILE%
IF %ERRORLEVEL% EQU 0 ( ECHO 设备----已连接 ) else ( echo 错误:请检查设备连接??? & goto failed_proc )
ECHO .
ECHO ______________________
ECHO 步骤二:烧录各分区镜像
ECHO .
REM 已烧写分区数统计
@set /a tatal=0
@fastboot flash modem NON-HLOS.bin>%CMD_TMP_FILE% 2>&1
@findstr /I "finished" %CMD_TMP_FILE%
IF %ERRORLEVEL% EQU 0 (echo modem--OK-- && set /a tatal+=1) else (echo modem----Faild---- && goto failed_proc)
REM ....
REM 忽略其他的语句
REM ....
REM 下面这2个没有分区表,Ignored
REM @fastboot flash PrimaryGPT gpt_main0.bin
REM @fastboot flash BackupGPT gpt_backup0.bin
ECHO .
ECHO ._______________Burned %tatal% images______________
ECHO .=======================OK=========================烧录完成!
ECHO .
goto end
REM 烧录过程出错,会以红色
:failed_proc
@color 0c
ECHO .
ECHO ._______________Burned %tatal% images______________
@echo.=======================FAILED=====================烧写过程出错!!!
ECHO .
:end
REM 删除临时产生的文件
del %ADB_TMP_FILE%
del %CMD_TMP_FILE%
pause
这个批处理中,需要先adb reboot bootloader让机器进入fastboot烧写模式,让后在运行这个脚本,一些注释(REM)也说明了。唯一要说的可能就是重定向了。我们知道标准输入、输出、错误用描述符0、1、2表示。默认的>即为1>,就是将标准输出定向到某个文件或设备。
fastboot devices >%ADB_TMP_FILE% 就是将命令的返回值重定向到文件中,好了问题下面出来了,
fastboot flash modem NON-HLOS.bin>%CMD_TMP_FILE% 这个命令输出不是返回值,而是烧写程序过程中的打印,检查%CMD_TMP_FILE%的内容是空的
fastboot flash modem NON-HLOS.bin>%CMD_TMP_FILE% 2>&1 后面加上2>&1就是解决问题了,这个烧写过程的打印都会重定向到指定的文件中去,这样我才能检测烧写过程有没有出错。
这个批处理感觉不方便,总不能去打开镜像目录(里面文件太多看了烦)再去找文件运行BURN_D500.CMD 吧,我们还是习惯把镜像放在一个目录或者映射的服务器盘上,然后把批处理放在桌面上,一键搞定。这个就涉及到批处理call批处理了。
贴上一键批处理文件:Call_Burn.cmd
@echo off
@title 运行脚本
REM 填入要烧写镜像所在目录
SET TARGET_DIR_PATH=XXXXXXXXXXX
REM 填入要运行的烧写脚本
SET CMD_NAME=BURN_D500.CMD
@ECHO 切换到fastboot模式。。。
@adb reboot bootloader
REM 延时5S预留机器重启时间,否则下面的烧写命令都失效
@ping 127.0.0.1 -n 6 >nul
PUSHD %TARGET_DIR_PATH%
@call %TARGET_DIR_PATH%\%CMD_NAME%
POPD
PUSHD和POPD成对使用,用于调用其他批处理时用,为什么这么做,就是切换当前默认目录,比如A.cmd调用B.cmd,在B.cmd中访问当前目录下的c.txt,如果不用PUSHD和POPD,B.cmd运行时就会说找不到c.txt,因为它是到A.cmd所在目录下找了。
只要将上面提示的镜像目录中的XXXXXXXXXX改为你镜像的目录即可。这样机器上电,在干干净净的桌面上双击Call_Burn.cmd,等待重写、烧写一键完成,如果遇到出错,字体会变为红色的,如果一路绿色,就没问题,中间烧录过程有一个错误都会提示你。