windows系统bat脚本命令总结之EnableDelayedExpansion

前言

        做了一段时间的bat脚本开发,bat脚本中有各种各样的命令跟传统的编程逻辑完全不同,本专栏会讲解下各种各式的命令使用方法。

        本篇文章讲解的是EnableDelayedExpansion的使用。

EnableDelayedExpansion简介

        EnableDelayedExpansion是用于在批处理脚本中启用延迟变量扩展的命令。

        在默认情况下,批处理脚本中使用百分号%来表示变量。但是,在一些情况下,特别是在循环或代码块内部,使用百分号%可能会导致变量展开不正确或无法正常工作。

        为了解决这个问题,可以通过使用EnableDelayedExpansion来启用延迟变量扩展。启用延迟变量扩展后,批处理脚本中的变量可以使用感叹号!来表示,而不是百分号%。

延迟变量扩展具有以下优势和用途:

        1、在循环中使用变量:
在批处理脚本中,使用百分号%来表示变量时,变量会在整个循环开始之前进行展开。这意味着在循环的每次迭代中,变量的值都是相同的。而通过启用延迟变量扩展,你可以在循环内部使用感叹号!来表示变量,以便正确地展开变量并获取每次迭代的不同值。

        2、在代码块内部使用变量:
在批处理脚本中,如果有一个代码块,在代码块外部定义的变量在代码块内部进行修改后,其值不会在代码块外部得到更新。启用延迟变量扩展后,你可以在代码块内部使用感叹号!来表示变量,并在代码块内部正确地展开变量并获取到更新后的值。

        3、避免特殊字符解释问题:
在批处理脚本中,如果变量中包含特殊字符,例如感叹号!,在使用百分号%表示变量时,批处理解释器会将感叹号解释为特殊字符,导致错误的结果。通过启用延迟变量扩展,你可以使用感叹号!来表示变量,并避免特殊字符解释问题。

使用教程

  1. 在批处理脚本的开头,添加setlocal EnableDelayedExpansion命令。这将启用延迟变量扩展,使你能够在代码中正确地使用感叹号!来访问变量。

  2. 在需要使用延迟变量扩展的地方,使用双感叹号!!来包裹变量名。

    示例:

    @echo off
    chcp 65001
    
    setlocal EnableDelayedExpansion
    
    set var=Hello
    echo 通过百分号展开:%var%
    echo 通过感叹号展开:!var!
    
    pause

                                                         在上述示例中,使用感叹号!来展开变量var,而不是使用百分号%。这是因为我们已经启用了延迟变量扩展。

  3. 在循环内部使用延迟变量扩展。

    示例:

    @echo off
    chcp 65001
    
    setlocal EnableDelayedExpansion
    set count=0
    for %%i in (1 2 3) do (
        set /A count+=1
        echo 当前循环:%count%
        echo 延迟展开的循环变量:!count!
    )
    
    pause

                                   在上述示例中,利用延迟变量扩展,我们可以在循环内部正确地展开变量count

  4. 使用!var!的注意事项:

    • 如果延迟变量扩展没有启用,使用双感叹号!!来包裹变量名将导致其被视为字符串文本,而不是变量。

    • 在包含双感叹号!!的代码行里,批处理解释器通常会将感叹号解释为特殊字符。为了避免这种解释,可以使用^!这样的转义符来告诉解释器忽略感叹号。

    示例:

    @echo off
    chcp 65001
    
    setlocal EnableDelayedExpansion
    
    set var=Goodbye^^!
    REM 输出:Goodbye!
    echo !var!
    REM 输出:!var!
    echo ^^!var^^!
    
    
    pause

                                                           在上述示例中,我们使用^^!来转义感叹号,以便正确地展开变量var

  5. 在脚本结束后,使用endlocal命令来还原初始的环境设置并移除启用的延迟变量扩展。

    示例:

    @echo off
    chcp 65001
    
    setlocal EnableDelayedExpansion
    set var=Hello
    echo 延迟展开的变量:!var!
    
    endlocal
    
    pause
    

    在上述示例中,使用endlocal命令来关闭当前的批处理块,还原初始的环境设置。

完毕!!!

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

番茄小能手

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值