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




posted @ 2017-06-06 16:13  mfmdaoyou  阅读(5805)  评论(0编辑  收藏  举报