cmd 好像把()中的语句当作一行处理

bat中类似if,for 之类的语句中如果使用变量时,一定要注意变量的展开时机问题,比如:

if [%test%]==[yes]  (
    flag=%name%
)

常常会发现flag并不等于hello,原因也就是在执行代码之前,变量被扩展。也就是在执行name=“hello”,之前代码已经把%name%用空转换掉。今天我发现网上一个让LOCAL中的变量穿出的用法时,说到用(),这让我想起()应该就是把一串代码当作一个解析执行单元,会先解析后执行。代码如下连接

:myGetFunc    - passing a variable by reference
SETLOCAL
set "aStr=DosTips"
( ENDLOCAL
    set "%~1=%aStr%"
)
goto:eof

也许cmd就是把()当作一个单元,先替换后执行,这样ENDLOCAL就不会影响到 %aStr%的值。这个和后面用&写成一行应该类似。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值