|
|
发表于 2021-6-29 14:31:01
|
显示全部楼层
本帖最后由 newswan 于 2021-6-29 14:48 编辑
回复 7# ChinaTB
简单的说,是变量作用域。
整个是全局作用域
setlocal 到 endlocal 之间是一个作用域。
这个局部作用域内,
如果有全局变量,在局部作用域内可以得到全局变量的值,但如果改变了这个变量,只在局部作用域中有效,全局变量的值不会改变
如果要在局部作用域内修改全局变量,可以在 “endlocal 语句组” 中 在 “endlocal 语句 之后”给变量赋值。
注意 是 “endlocal 语句组” “endlocal 语句组” “endlocal 语句组”
可以是可以是麻烦在于,局部作用域中所有变量都是局部的,要修改全局变量,必须 在退出局部区域时 给每个全局变量重新赋值。
好处在于,局部代码最好从一个地方退出,不能随便跳到外部,有利于规范
测试- @echo off
- set va="xxx"
- echo "g1:" %va%
- setlocal enabledelayedexpansion
- rem call 2.bat va
- set va=xxxx
- echo,
- echo "l1:" %va%
- (
- endlocal disabledelayedexpansion
- set va=%va%
- )
- echo,
- echo "g2:" %va%
- (
- setlocal enabledelayedexpansion
- set va=%va%
- )
- echo,
- echo "l2:" %va%
- endlocal disabledelayedexpansion
复制代码 win7 没有开启变量延迟时, ! 只是普通字符, !a! 不表示变量值 |
|