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

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-08-01 14:23:05

关于bat的变量赋值和解析机制的相关文章

轻松搞定javascript预解析机制(搞定后,一切有关变态面试题都是浮云~~)

hey,guys!我们一起总结一下JS预解析吧! 首先,我们得搞清楚JS预解析和JS逐行执行的关系.其实它们两并不冲突,一个例子轻松理解它们的关系: 你去酒店吃饭,吃饭前你得看下菜谱,点下菜(JS预解析),但吃的时候还是一口一口的吃(JS逐行执行)! OK,解决下面五个问题,JS预解析就算过了~~(前提:对JS变量作用域有清晰理解) 一.JS预解析是什么? 其实就是对程序要用到的材料(变量,函数)给一个初始值,并存到一个表中(我自己虚构的),当程序运行到那一行时,就来这个表看有没有初始值,没有就

从var func=function 和 function func()区别谈Javascript的预解析机制

var func=function 和 function func()在意义上没有任何不同,但其解释优先级不同:后者会先于同一语句级的其他语句. 即: { var k = xx(); function xx(){return 5;} } 不会出错,而 { var k = xx(); var xx = function(){return 5;} } 则会出错. 为什么会这样呢?这就要引出javascript中的预解析机制来解释了. JavaScript解析过程分为两个阶段,一个是编译阶段,另外一个

Android应用setContentView与LayoutInflater加载解析机制源码分析

[工匠若水 http://blog.csdn.net/yanbober 转载烦请注明出处,尊重分享成果] 1 背景 其实之所以要说这个话题有几个原因: 理解xml等控件是咋被显示的原理,通常大家写代码都是直接在onCreate里setContentView就完事,没怎么关注其实现原理. 前面分析<Android触摸屏事件派发机制详解与源码分析三(Activity篇)>时提到了一些关于布局嵌套的问题,当时没有深入解释. 所以接下来主要分析的就是View或者ViewGroup对象是如何添加至应用程

JS的解析机制

JS的解析机制,是JS的又一大重点知识点,在面试题中更经常出现,今天就来唠唠他们的原理.首先呢,我们在我们伟大的浏览器中,有个叫做JS解析器的东西,它专门用来读取JS,执行JS.一般情况是存在作用域就存在解析,那它是怎么运行的呢.首先呢,然后分成两大步骤. 1 第一步叫做JS预解析,这一步骤实际上是一种准备工作把,在执行之前,它会先浏览整个代码,然后寻找三种东西. 1var  2 函数声明    我来分别解释一下.首先它会提取带var声明的变量,然后放到作用域中,但是不会提取变量的值,会先给他赋

javascript解析机制——预解析

JavaScript解析机制是什么? JavaScript解析过程分为两个阶段,一个是编译阶段,另外一个就是执行阶段. * 编译阶段         编译阶段就是我们常说的JavaScript预解析(预处理)阶段,在这个阶段JavaScript解释器将完成把JavaScript脚本代码转换到字节码. * 执行阶段 在编译阶段JavaScript解释器借助执行环境把字节码生成机械码,并顺序执行. 编译阶段(预解析阶段)做什么操作? * var , function声明的变量提升 首先,创建一个当前

进击JavaScript核心 --- (2)函数和预解析机制

一.函数 每个函数都是 Function类型的实例,也具有属性和方法.由于函数也是一个对象,因此函数名实际上也是一个指向函数对象的指针,不会与某个函数绑定 1.函数的定义方式 (1).函数声明 function add(a, b) { return a + b; } 函数声明提升:在执行代码之前,会先读取函数声明,也就是说,可以把函数声明放在调用它的代码之后 fn(); // 1 function fn() {console.log(1)} (2).函数表达式 var add = functio

shell 的特性:命令行展开,变量赋值,以及文件层次标准(history)

bash默认会保存以前执行过的命令列表 当前shell的进程保存在缓冲区中 缓冲区中的命令会在shell退出后保存在文件中    .bash history 使用上下箭头可以翻看此前执行过的命令 history: !数字  :  执行history中第数字条命令 !!   :  上一条命令 !-数字:表示执行命令列表中的倒数第数字条命令 ESC .  : 执行上个命令的最后参数 ! string:执行命令列表中最后一个以string开头的命令 - d :删除第数字条记录 -c:清空history

关于JS解析机制、作用域的一些总结

JS语句是怎么解析的(同一个作用域)首先会全局查找(预解析) var.function 提升其优先级: alert(a);var a = 1;是这么解析的:var a;alert(a);a = 1;所以结果是 undefined1.所有的变量在正式代码运行之前,都是undefined2.所有的函数在正式代码运行之前,都是函数块(域) 其次解读代码:一些表达式(+-=*%!等)表达式可以修改预解析的值函数调用 遇到函数域或者一个新的域 又会重复做首先.其次的动作 作用域链查找规则:自上而下(一个或

Oracle 过程中变量赋值

? 1 2 3 4 5 6 7 8 9 10 create or replace function get_sal1(id employees.employee_id%type)   return number is   sal employees.salary%type; begin   sal := 0;   select salary into sal from employees where employee_id = id;   return sal; end; ? 1 2 3 4 5