Bat脚本之延时变量cmd /v:on

延时环境变量作用即工作原理:

​ 当准备执行一条命令时,命令解释器会检查语句中是否有环境变量,如果有就会先将变量的值读取出来赋给变量,就像初始化,会将已知变量先赋值。这会导致语句中多次使用的某个环境变量的值都是一样的都是一个定值。

​ 延时环境变量,开启方式如下,使用!xx!包裹,不是%xx%,会在变量使用的时候才进行读值赋值,不会在一开始就赋值。

举个例子:

C:Users98483>set it=1
C:Users98483>set /a it+=1 & echo %it%
21
C:Users98483>echo %it%
2

我们需要的输出是22 要加1,但是由于解释器会在开始的时候就给环境变量附上值,所以echo %it%没有加1,但是再单独执行echo %it% 会发现it=2了

cmd /v  开启延时变量
C:Users98483>cmd /v
Microsoft Windows [版本 10.0.19042.928]
(c) Microsoft Corporation。保留所有权利。

C:Users98483>set /a it+=1 & echo %it%
33
  1. cmd下开启/关闭延迟环境变量
在cmd下开启或延迟环境变量用/v参数:
cmd /v:on    //开启延迟环境变量 直接cmd /v 也可以
cmd /v:off   //关闭延迟环境变量

cmd 字符串也可以使用:
cmd /v /c "set it=1 & set /a it+=1 & echo !it!"

  1. 批处理中开启/关闭延迟环境变量
在批处理中开启或关闭延迟环境变量用setlocal命令:
setlocal EnableDelayedExpansion    //开启延迟环境变量
setlocal DisableDelayedExpansion   //关闭延迟环境变量
原文地址:https://www.cnblogs.com/forforever/p/14906582.html