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

前言

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

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

EnableDelayedExpansion简介

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

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

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

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

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

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

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

使用教程

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

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

    示例:

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

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

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

    示例:

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

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

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

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

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

    示例:

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

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

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

    示例:

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

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

完毕!!!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/233753.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

如何提高销售技巧,增加客户的成交率?

如何提高销售技巧,增加客户的成交率? 在如今的市场环境中,销售技巧的高低往往决定了你是否能够成功地打动客户的心。想要提高销售业绩,除了产品质量和服务的保障,更需要你精进销售技巧,从而让客户愿意为你…

mvn 编译时报错 java heap space

问题描述 使用IDEA进行war打包时,编译类都正常,但是最后生成 war 包时很慢,有些时候还会报错: java head space。具体错误如图: 问题诊断 换电脑,可行清理 .idea 目录重新打包还是不行升级 maven-war-plu…

微服务实战系列之EhCache

前言 书接前文,继续深耕。上一篇博主对Redis进行了入门级介绍,大体知道了Redis可以干什么以及怎么使用它。 今日博主继续带着大家学习如何使用EhCache,这是一款基于Java的缓存框架。 微服务实战系列之Redis(cache)微…

论文阅读——SEEM

arxiv: 分割模型向比较灵活的分割的趋势的转变:封闭到开放,通用到特定、one-shot到交互式。From closed-set to open-vocabulary segmentation,From generic to referring segmentation,From one-shot to interactive segmentati…

Windows核心编程 HOOK

目录 HOOK概述 HOOK API SetWindowsHookExA 函数(winuser.h) UnhookWindowsHookEx 函数(winuser.h) NextHookEx 函数(winuser.h) 局部钩子 全局钩子 为什么全局钩子需要用dll作为过程函数? HOOK概述 本质:Windows消系统的消息过滤器。 全局钩子…

【BSP开发经验】uboot gpl框架开发经验

文章目录 uboot_gpl 隔离 的目的uboot_gpl 隔离基本原理uboot_gpl 基本框架uboot_gpl 适配新平台的方式uboot 添加hikcmd功能适配调试步骤 链接脚本语法链接脚本的格式链接脚本的简单示例设置入口点(entry)设置输出文件名处理目标文件格式的命令uboot_gp…

数据库应用:MongoDB 文档与索引管理

目录 一、理论 1.MongoDB文档管理 2.MongoDB索引管理 二、实验 1.MongoDB文档管理 2.MongoDB索引管理(索引添加与删除) 3.MongoDB索引管理(全文索引) 4.MongoDB索引管理(多列索引) 5.MongoDB索引管…

教育企业CRM选择技巧

教育行业的发展一波三折,要想在激烈的赛道脱颖而出,就需要有一套有效的CRM系统,来帮助教育机构提升招生效率、增加学员留存、提高教学质量。下面说说,教育企业选择CRM系统要具备的四大功能。 1、招生管理功能 教育机构的首要目标…

珠宝模具3d仿真沉浸式交互展示更易分享传播

3D云展会经过近几年的蓬勃发展,迅速受到参展企业和客户的多方认可和支持,那么随着市场再度恢复,各种展会络绎不绝,想要快速打造一个逼真的线上3D云展会成为企业刚需。3D云展会线上搭建平台是web3d开发公司深圳华锐视点根据领先的三…

蓝桥杯每日一题2023.11.29

题目描述 #include <stdio.h> #include <string.h>void StringInGrid(int width, int height, const char* s) {int i,k;char buf[1000];strcpy(buf, s);if(strlen(s)>width-2) buf[width-2]0;printf("");for(i0;i<width-2;i) printf("-"…

socket.io介绍

1. 使用的技术 Socket.IO 是一个封装了 Websocket、基于 Node 的 JavaScript 框架&#xff0c;包含 client 的 JavaScript 和 server 的 Node。其屏蔽了所有底层细节&#xff0c;让顶层调用非常简单。 另外&#xff0c;Socket.IO 还有一个非常重要的好处。其不仅支持 WebSocket…

STM32 外部中断配置与中断函数设计

单片机学习 目录 文章目录 一、外部中断配置步骤 1.1配置RCC 1.2配置GPIO 1.3配置AFIO 1.4配置EXTI 1.5配置NVIC 二、中断函数设计 总结 一、外部中断配置步骤 第一步&#xff1a;配置RCC&#xff0c;把涉及外设的时钟打开。第二步&#xff1a;配置GPIO&#xff0c;选择…