zoukankan      html  css  js  c++  java
  • 延迟的环境变量扩展

    要理解什么是“延迟的环境变量扩展”,首先要理解什么是“环境变量扩展”。

    cmd在解释我们的命令的时候,首先会读取命令行一条完整的命令,然后对其进行一些命令格式的匹配操作,看你所输的命令格式是否正确。如果我们要在命令中引用一些变量,那么我们需要在变量的两边各加一个%号,使cmd在解释我们的命令的时候能够识别这个变量,例如%name%。当cmd读取我们的命令进行格式匹配的时候,就会发现name这个字符串两边各加了一个%,就不会把它当作普通字符串处理,而是把它当作一个变量处理,变量名就叫做name。然后cmd就会查找这个变量的值,用该值替换掉%name%,最后执行这个替换好的命令。这个替换的过程就叫做环境变量扩展。

    对于if、for这样的命令,可以将命令嵌套在括号里,所以一个完整的if命令可能包含多个需要执行的命令,但是cmd在解释这类命令的时候,会把它当作一条完整的命令,从而导致出现一些问题。

    示例代码如下如下:

    1 @echo off
    2 set /a var = 0
    3 for /l %%m in (1,1,5) do (
    4     set /a var = %%m
    5     echo %var%
    6 )
    7 pause

    执行结果如下:

    这是因为在命令执行之前,变量便进行了替换,导致嵌套在for命令里的操作没有体现出来。这时候,“延迟的环境变量扩展”的概念被提出来了。“延迟的环境变量扩展”,即每条命令在执行之前,才将变量进行替换,以保证对变量的任何修改都可以实时生效。

    我们可以使用“setlocal enabledelayedexpansion”命令来开启延迟的环境变量扩展,启用后,我们使用!name!来进行取值,而不是%name%。

    修改后的代码如下:

    1 @echo off
    2 setlocal enabledelayedexpansion
    3 set /a var = 0
    4 for /l %%m in (1,1,5) do (
    5     set /a var = %%m
    6     echo !var!
    7 )
    8 pause

    执行后的结果如下:

  • 相关阅读:
    C#学习笔记(28)——委托排序(2)自定义排序
    C#学习笔记(27)——委托排序(1)
    C#学习笔记(26)——委托计算器
    C#学习笔记(25)——用刻盘器批量从U盘删除添加文件
    ABBYY FineReader Pro for Mac系统要求
    ABBYY FineReader错误代码142和55
    哪些因素影响ABBYY FineReader 12的识别质量
    ABBYY FineReader 12没你想得那么简单
    超强OCR文字识别软件首选ABBYY FineReader
    详解ABBYY FineReader 12扫描亮度设置
  • 原文地址:https://www.cnblogs.com/minisculestep/p/4959612.html
Copyright © 2011-2022 走看看