关于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




你可能感兴趣的:(bat,变量,命令结果,函数,for)