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

news2024/10/5 21:24:42

前言

        做了一段时间的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命令来关闭当前的批处理块,还原初始的环境设置。

完毕!!!

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

开发提测前测试的目的是什么

📢专注于分享软件测试干货内容,欢迎点赞 👍 收藏 ⭐留言 📝 如有错误敬请指正!📢交流讨论:欢迎加入我们一起学习!📢资源分享:耗时200小时精选的「软件测试」资…

为什么修改IP和隐藏IP地址?修改IP地址带来哪些好处?

随着互联网的普及,越来越多的人开始依赖网络进行日常生活和工作。然而,在上网过程中,我们的IP地址是暴露无遗的,这就有可能导致一些安全问题。因此,修改IP和隐藏IP地址的需求应运而生。那么,为什么要修改IP…

【深度学习实验】图像处理(三):PIL——自定义图像数据增强操作(随机遮挡、擦除、线性混合)

文章目录 一、实验介绍二、实验环境1. 配置虚拟环境2. 库版本介绍 三、实验内容0. 导入必要的库1. PIL基础操作2. Cutout(遮挡)2.1 原理2.2 实现2.3 效果展示 3. Random Erasing(随机擦除)3.1 原理3.2 实现3.3 效果展示 4. Mixup&…

Spring-Mybatis源码解析--手写代码实现Spring整合Mybatis

文章目录 前言一、引入:二、准备工作:2.1 引入依赖2.2 数据源的文件:2.1 数据源: 2.3 业务文件: 三、整合的实现:3.1 xxxMapper 接口的扫描:3.2 xxxMapper 接口代理对象的生成:3.2 S…

分享83个简历竞聘PPT,总有一款适合您

分享83个简历竞聘PPT,总有一款适合您 83个简历竞聘PPT下载链接:https://pan.baidu.com/s/1iybRAisgWgXhelE1tGpzBw?pwd8888 提取码:8888 Python采集代码下载链接:采集代码.zip - 蓝奏云 学习知识费力气,收集整…

java学习part25多线程

132-多线程-程序、进程、线程与并行、并发的概念_哔哩哔哩_bilibili 1.概念 2.共享内容 只有线程间能通信,进程之间不共享内容。 3.继承thread的多线程 相当于golang里先写一个线程函数run(),子类对象调用start()相当于go关键字 相当于go run() package thread;/…

Target、沃尔玛撸卡、采退支付下单如何避免账号关联风险?

近年来,随着跨境电商平台的日益繁荣,越来越多的国内卖家涌入其中,导致竞争异常激烈。为了在竞争中脱颖而出,一些卖家采用自动脚本程序进行浏览和下单,然而这种行为很容易导致账号被批量关联、封号。本文将探讨养号下单…

算法面试题--树与对象数组的转化

1. Array -> Tree var arr [{ id: 12, parentId: 1, name: "朝阳区" },{ id: 241, parentId: 24, name: "田林街道" },{ id: 31, parentId: 3, name: "广州市" },{ id: 13, parentId: 1, name: "昌平区" },{ id: 2421, parentId:…

Java核心知识点整理大全24-笔记

22. 数据结构 22.1.1. 栈(stack) 栈(stack)是限制插入和删除只能在一个位置上进行的表,该位置是表的末端,叫做栈顶 (top)。它是后进先出(LIFO)的。对栈的基…

2023.11.12 阿里云产品全线故障

阿里云 11.12 故障原因曝光:访问密钥服务 (Access Key) 异常 (baidu.com) 故障原因竟然是因为生成白名单代码逻辑缺陷。

皮肤警告,羊大师讲解身体与环境的默契

皮肤警告,羊大师讲解身体与环境的默契 我们常常忽视身体皮肤所承受的压力和警告信号。皮肤是身体的第一道屏障,也是与外界环境直接接触的组织。我们的皮肤通过各种方式向我们传达信息,警告我们关于身体健康的重要问题。本文小编羊大师将带大…

堆栈_队列实现栈

//请你仅使用两个队列实现一个后入先出(LIFO)的栈,并支持普通栈的全部四种操作(push、top、pop 和 empty)。 // // 实现 MyStack 类: // // // void push(int x) 将元素 x 压入栈顶。 // int pop() 移除…

外汇天眼:CFTC修订了针对Logista Advisors的投诉

商品期货交易委员会(CFTC)修改了对Logista Advisors LLC及其首席执行官Andrew Harris Serotta的投诉。修改后的投诉于2023年11月28日提交给伊利诺伊州北区法院。 修改后的投诉声称,从至少2020年1月左右至少到2020年4月左右,Logis…

whatsapp信息群发脚本开发!

WhatsApp 作为全球广受欢迎的通讯应用,在我们的日常生活中扮演着重要角色,有时候,我们需要向大量联系人发送消息,比如营销推广、活动通知等。 一个个手动发送消息?那简直太落后了!今天,我们将探讨如何利用脚本开发实…

使用JAVA语言写一个排队叫号的小程序

以下是一个简单的排队叫号的小程序&#xff0c;使用JAVA语言实现。 import java.util.LinkedList; import java.util.Queue; import java.util.Scanner;public class NumberingSystem {public static void main(String[] args) {Queue<String> queue new LinkedList<…

探索使用Quarkus和MicroProfile 构建Kubernetes原生微服务的秘诀!

Kubernetes Native Microservices with Quarkus and MicroProfile 是一个基于Kubernetes原生微服务的开发框架&#xff0c;它结合了Quarkus和MicroProfile的优点&#xff0c;提供了一个高效、可扩展、易于管理的微服务解决方案。 Quarkus是一个针对Java虚拟机&#xff08;JVM&…

企业计算机服务器中了mallox勒索病毒如何解密,mallox勒索病毒文件恢复

随着网络技术的不断发展&#xff0c;网络安全威胁也在不断增加&#xff0c;勒索病毒攻击企业计算机服务器的事件时有发生&#xff0c;并且勒索病毒的加密形式也越来越复杂。近期&#xff0c;云天数据恢复中心陆续接到很多企业的求助&#xff0c;企业的计算机服务器遭到了mallox…

配电室无人值守方案

配电室无人值守一种应用先进技术实现配电室自动化运行、实时远程监控和管理的解决方案。力安科技配电室无人值守&#xff0c;加装小安值班机器人或边缘网关&#xff0c;完成配电室智能化升级&#xff0c;依托电易云&#xff0c;构建智慧配电室及运维系统。 设备选型和安装&…

数据结构-04-队列

1-队列的结构和特点 生活中我们排队买票&#xff0c;先来的先买&#xff0c;后来的人只能站末尾&#xff0c;不允许插队。先进者先出&#xff0c;这就是典型的"队列"。队列跟栈非常相似&#xff0c;支持的操作也很有限&#xff0c;最基本的操作也是两个&#xff1a;入…

问题记录-maven依赖升级或替换(简单版)

问题背景 项目被检测到有高危漏洞&#xff0c;需要对部分jar进行升级。以一个jar为例记录一下升级过程。 1 找到高危漏洞的包 如果装了maven helper插件则可以在下面查看当前模块依赖包 2 使用maven命令 执行下面这个命令&#xff0c;会将当前项目的信息打印出来&#xff0c;…