加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

string – 批处理:从SETLOCAL EnableDelayedExpansion返回值

发布时间:2020-12-15 22:06:47 所属栏目:安全 来源:网络整理
导读:我想知道为什么这段代码不能按预期工作: @ECHO offSET S1=HELLOSETLOCAL EnableDelayedExpansionSET S2=!S1! WORLD^^!ECHO !S2!ENDLOCAL SET S1=!S2!ECHO %S1%PAUSE 输出: HELLO WORLD!!S2! 预期产量: HELLO WORLD!HELLO WORLD! 谢谢. 解决方法 它按预期
我想知道为什么这段代码不能按预期工作:

@ECHO off
SET S1=HELLO

SETLOCAL EnableDelayedExpansion
SET S2=!S1! WORLD^^!
ECHO !S2!
ENDLOCAL & SET S1=!S2!

ECHO %S1%
PAUSE

输出:

HELLO WORLD!
!S2!

预期产量:

HELLO WORLD!
HELLO WORLD!

谢谢.

解决方法

它按预期工作.
延迟扩展将在执行时扩展变量,而不是解析时间,因此它会解释您的行ENDLOCAL& SET S1 =!S2!如
ENDLOCAL
但在SET S1 =!S2的部分!延迟扩张已关闭,因此无法再扩展.

在你的情况下你可以使用
ENDLOCAL& SET S1 =%S2%

由于感叹号是S2是“安全的”,因为延迟exp.在执行时关闭.

但总是安全的回归有点复杂.
我们在Dostips: Return ANY string across ENDLOCAL boundry讨论过它

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读