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

完毕!!!

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Linux:理解文件重定向

文章目录 文件内核对象fd的分配问题重定向的现象dup2 重定向的使用标准输出和标准错误 前面对于文件有了基本的认知,那么基于前面的认知,本篇总结的是文件重定向的含义极其本质 文件内核对象 首先理解一下file内核对象是什么,回顾一下下面这…

python-nmap库使用教程(Nmap网络扫描器的Python接口)(功能:主机发现、端口扫描、操作系统识别等)

文章目录 Python-nmap库使用教程前置条件引入python-nmap创建Nmap扫描实例执行简单的主机发现(nmap -sn)示例,我有一台主机配置为不响应 ICMP 请求,但使用nmap -sn,仍然能够探测到设备: 端口扫描扫描特定端…

从setText处理来学习绘制流程

Android中TextView调用setText是会进行text文字的更新,是一个比较简单的画面变化,这可以作为一个出发点来查看绘制处理流程。这里来问问chatGPT,来查看大致流程 请讲讲Android中textView的setText处理流程 ChatGPT Poe 当你调用 textView.s…

二分算法(整数二分、浮点数二分)

文章目录 二分一、整数二分(一)整数二分思路(二)整数二分算法模板1.左查找(寻找左侧边界)2.右查找(寻找右侧边界)3.总模板 (三)题目:数的范围 二、…

【linux网络】补充网关服务器搭建,综合应用SNAT、DNAT转换,dhcp分配、dns分离解析,nfs网络共享以及ssh免密登录

目录 linux网络的综合应用 1)网关服务器:ens35:12.0.0.254/24,ens33:192.168.100.254/24;Server1:192.168.100.101/24;PC1和server2:自动获取IP;交换机无需…

spring框架的事务传播级别经典篇

一 spring事务传播级别 1.1 总结概述 方法A:外围方法,方法B:内部方法,在A中调用B 1.事务级别PROPAGATION_REQUIRED: 如果A为PROPAGATION_REQUIRED:B 不管有没有设置事务级别,都会加入到A的事务级别中。如…

低代码究竟有何特别之处?为什么很多企业倾向于用低代码开发软件?

目录 一、低代码是什么 二、低代码有哪些核心能力? 三、低代码能做哪些事情? 1、软件开发快效率高 2、满足企业的多样化需求 3、轻松与异构系统集成 4、软件维护成本低 5、为企业实现降本增效 四、结语 低代码平台正高速发展中,越来越多的企业…

phpoffice在tp框架中如何实现导入导出功能

安装 phpoffice/phpspreadsheet 库 composer require phpoffice/phpspreadsheet 导入功能 创建一个用于上传文件的视图&#xff0c;可以使用元素来实现文件上传。 <!-- application/view/your/import.html --><form action"{:url(your/import)}" method&q…

智慧博物馆视频监控系统设计,可视化AI智能分析技术助力博物馆多维度监管

一、背景与需求 博物馆视频智能监控系统是智慧博物馆建设的重要组成部分&#xff0c;传统的博物馆视频监控系统以模拟系统架构为主&#xff0c;存在监管效率低、各个系统独立运作形成数据孤岛、以“事后补救”为主要监管手段等管理弊病&#xff0c;无法满足互联网高速发展背景…

学习笔记:Pytorch 搭建自己的Faster-RCNN目标检测平台

B站学习视频 up主的csdn博客 1、什么是Faster R-CNN 2、pytorch-gpu环境配置&#xff08;跳过&#xff09; 3、Faster R-CNN整体结构介绍 Faster-RCNN可以采用多种的主干特征提取网络&#xff0c;常用的有VGG&#xff0c;Resnet&#xff0c;Xception等等。 Faster-RCNN对输入…

Re8 Generative Modeling by Estimating Gradients of the Data Distribution

宋扬博士的作品&#xff0c;和DDPM同属扩散模型开创工作&#xff0c;但二者的技术路线不同 Introduction 当前生成模型主要分成两类 基于似然模型 通过近似最大似然直接学习分布的概率密度&#xff0c;如VAE 隐式生成模型 概率分布由其抽样过程的模型隐式表示&#xff0c…

Verilog 入门(三)(表达式)

文章目录 操作数操作符算术操作符关系操作符相等关系操作符逻辑操作符按位操作符条件操作符 操作数 操作数可以是以下类型中的一种&#xff1a; 常数参数线网寄存器位选择部分选择存储器单元函数调用 操作符 Verilog HDL中的操作符可以分为下述类型&#xff1a; 算术操作符…

WPF窗口样式的比较

WPF窗口样式的比较 1.WPF默认Window窗口 带有图标 标题栏 最小最大化推出按钮 <Window x:Class"GlowWindowDemo.MainWindow"xmlns"http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x"http://schemas.microsoft.com/winfx/2006…

在Spring Boot中使用JavaMailSender发送邮件

用了这么久的Spring Boot&#xff0c;我们对Spring Boot的了解应该也逐步进入正轨了&#xff0c;这篇文章讲的案例也在我们的实际开发中算是比较实用的了&#xff0c;毕竟我们完成注册功能和对用户群发消息&#xff0c;都可以采用到邮箱发送功能&#xff0c;往下看&#xff0c;…

焕发图片生机,批量升级gif图片像素,打造高质量图片盛宴!

你是否曾经遇到过需要提高gif图片质量&#xff0c;但手动处理每一张图片又非常耗时且繁琐的情况&#xff1f;如果你觉得处理大量图片会让你感到压力&#xff0c;那么你一定需要我们的批量提高像素工具&#xff01; 第一步&#xff0c;首先我们要进入首助剪辑高手主页面&#x…

ELFK集群部署(Filebeat+ELK) 本地收集nginx日志 远程收集多个日志

filebeat是一款轻量级的日志收集工具&#xff0c;可以在非JAVA环境下运行。 因此&#xff0c;filebeat常被用在非JAVAf的服务器上用于替代Logstash&#xff0c;收集日志信息。 实际上&#xff0c;Filebeat几乎可以起到与Logstash相同的作用&#xff0c; 可以将数据转发到Logst…

正式版PS 2024 25新增功能 刚刚发布的虎标正式版

Adobe Photoshop 2024是一款业界领先的图像编辑软件&#xff0c;被广泛应用于设计、摄影、插图等领域。以下是这款软件的一些主要功能和特点&#xff1a; 丰富的工具和功能。Adobe Photoshop 2024提供了丰富的工具和功能&#xff0c;可以帮助用户对图像进行编辑、修饰和优化。…

虚拟数据生成_以Python为工具

生成虚拟数据_以Python为工具 生成虚拟数据技术在现实生活中具有多个重要的应用领域。它为数据隐私保护、机器学习算法开发、数据处理和可视化等方面提供了实用且有价值的解决方案。尤其是能满足定制化需求的虚拟数据&#xff0c;在预期的方向上让数据定向随机。 &#x1f339…

编程之外,生活的美好航程

&#x1f680; 作者主页&#xff1a; 有来技术 &#x1f525; 开源项目&#xff1a; youlai-mall &#x1f343; vue3-element-admin &#x1f343; youlai-boot &#x1f33a; 仓库主页&#xff1a; Gitee &#x1f4ab; Github &#x1f4ab; GitCode &#x1f496; 欢迎点赞…

volatile-之小总结

凭什么我们Java写了一个volatile关键字&#xff0c;系统底层加入内存屏障&#xff1f;两者的关系如何勾搭&#xff1f; 内存屏障是什么&#xff1f; 是一种屏障指令&#xff0c;它使得CPU或编译器对屏障指令的前和后所发出的内存操作执行一个排序的约 束。也称为内存栅栏或栅…