关于bat的变量赋值和解析机制
以下的演示涉及几个知识点:
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