下面的演示涉及几个知识点:
1. 如何把命令输出内容保存到变量中?
2. 多次改变变量值,为什么在for或是if的()中的无效,如何变通?
3. bat的function实现?
见代码,和代码注释
::@echo off ::adb的绝对路径 set qAdb="d:\Program Files (x86)\android-sdks\platform-tools\adb.exe" echo ADB.exe绝对路径是: %qAdb% ::通过for能使用``来返回命令的输出到变量中的特点,达到把命令输出结果保存到变量的目的 FOR /F "usebackq delims==" %%i IN (`%qAdb% get-state`) do ( echo 手机当前连接状态:%%i set mobileState=%%i ) echo. ::不能使用NOT 否则无法使用()这样多行的语句; ::()中无法写注释,因为bat把它()当成一行语句,这样注释就相当于一行中语句一部分 if "device" == "%mobileState%" ( echo 手机已经连接上 ) else ( echo 手机未连接 echo. echo 您的电脑IP当前地址如下: ipconfig|find /I "IPv4" echo. call :getIp call :connect ) ::下面因为是function声明部分,就当这里是bat的末尾,使用goto跳转到bat末尾 GOTO :EOF ::下面是function=============================== ::func 得到用户输入ip :getIp set /p ip=输入手机ip地址,以adb连接它 ::退出本次回调,跳转到bat尾 GOTO :EOF ::func 使用用户输入ip通过adb连接手机 ::因为bat的()当成一行解析,在解析这一行代码时,里面使用到的变量值必须在解析前赋值,在这一行中改变某变量值时,只有在下句语句解析时,才得得到;根据这个特性,无法在一行中改变变量,所以只能把set与get分开写成多行(label)的方式来执行 :connect echo. echo 尝试连接 %ip% %qAdb% connect %ip% ::退出本次回调,跳转到bat尾 GOTO :EOF
版权声明:本文为博主原创文章,未经博主允许不得转载。
原文地址:http://blog.csdn.net/qidizi/article/details/46841203