【CMD 延迟扩展】FOR 语句读不到值的问题

延迟扩展将导致批处理文件中的变量在执行时而不是在解析时扩展(变量赋值),此选项通过

SETLOCAL EnableDelayedExpansion

命令打开。延迟扩展意味着用它的值替换它的变量。

默认情况下,在执行每行之前,扩展只会发生一次, 启用延迟扩展,可以使每次执行该行时都会进行扩展,或者说,对于 FOR 循环命令中的每个循环都会执行扩展。

具体来说, %vars% 引用的是会话变量,而每一个语句只有在结束后才会影响到会话变量(扩展),启用延迟扩展,实际上就是启用局部变量的读取(格式:!vars!

以下例子:

@echo offrem %vars% 引用的是会话变量,而每一个语句只有在结束后才会影响到会话变量,在一个会话中多次执行此脚本可以验证。for /l %%a in (0,1,5) do (rem FOR 循环代码作为一个整体语句,%i% 总是从会话变量中取值,因此循环中局部变量 i 值不变,比 %i% 大 1 。set /a i=%i%+1rem 循环结束后局部变量 i 才被扩展到会话变量,在同一会话的下一次执行中,%i% 才可以拿到变更后的会话变量。echo i: %i%
)for /l %%a in (0,1,5) do (rem FOR 循环代码作为一个整体语句,局部变量 j 的值由 1 变到 5,语句执行完成后,j=5 被扩展到会话变量。set j=%%arem 因此脚本第一次执行 j 为空,随后总是 5echo j: %j%
)rem 启用延迟扩展
setlocal enabledelayedexpansion
for /l %%a in (0,1,5) do (rem !vars! 用于读取局部变量,因此可以读到 1 - 5 的数据。set /a k=!k!+1echo K: !k!rem 读取会话变量 j(总是 5)。echo j: %j%
)
endlocal

脚本第一次执行输出:

i:
i:
i:
i:
i:
i:
j:
j:
j:
j:
j:
j:
K: 1
j: 5
K: 2
j: 5
K: 3
j: 5
K: 4
j: 5
K: 5
j: 5
K: 6
j: 5

第二次执行输出:

i: 1
i: 1
i: 1
i: 1
i: 1
i: 1
j: 5
j: 5
j: 5
j: 5
j: 5
j: 5
K: 1
j: 5
K: 2
j: 5
K: 3
j: 5
K: 4
j: 5
K: 5
j: 5
K: 6
j: 5

第三次执行输出:

i: 2
i: 2
i: 2
i: 2
i: 2
i: 2
j: 5
j: 5
j: 5
j: 5
j: 5
j: 5
K: 1
j: 5
K: 2
j: 5
K: 3
j: 5
K: 4
j: 5
K: 5
j: 5
K: 6
j: 5

  

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

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

相关文章

VMware ESXi 8.0U3 macOS Unlocker OEM BIOS Huawei (华为) FusionServer 定制版

VMware ESXi 8.0U3 macOS Unlocker & OEM BIOS Huawei (华为) FusionServer 定制版VMware ESXi 8.0U3 macOS Unlocker & OEM BIOS Huawei (华为) FusionServer 定制版 ESXi 8.0U3 标准版,Dell (戴尔)、HPE (慧与)、Lenovo (联想)、Inspur (浪潮)、Cisco (思科)、Hitac…

常见数据摆渡系统全面比较,哪一款才是众望所归?

数据摆渡是一种利用物理隔离或特定设备,在不相连的计算机或系统之间传输数据的方法。其原理主要基于中间层的数据处理和转换,确保数据在不同系统之间能够进行有效的交换和共享。对于企业而言,数据摆渡场景主要发生在企业隔离网间。基于网络安全管理需要,企业采用防火墙等网…

PHP 真的不行了?透过 PHP 的前世今生看真相

时代造就了马云,同样也成就了 PHP。大家好,我是码农先森。 1994年我出生在湖南的农村,就在同年加拿大的拉斯姆斯勒多夫创造了 PHP,这时的 PHP 还只是用 Perl 编写的 CGI 脚本。或许是时间的巧合 PHP 变成了我后半生谋生的手段,当时拉斯姆斯勒多夫写这些脚本的目的,只是为…

智慧校园视频监控系统

智慧校园视频监控系统助力学校传统安防监控智能升级,借助智慧校园视频监控系统可以避免传统视频监控“被动”监控,有效监控价值低,不能及时预警预防的能力。智慧校园视频监控具备大规模智能检测、多场景智能分析、机器自主学习、实时告警、实时分析、全天运行,实现校园管理…

施工现场视频监控系统

施工现场视频监控系统可以从作业人员进入施工现场的入口处就开始对进入人员进行现场视频监控系统的检测识别,如果系统侦查到进入的人员着装穿戴不符合工地企业的进入要求就会立即预警提醒进入人员按照要求整改后再进入施工现场,保证进入施工现场作业人员的着装合规符合要求,…

智慧工地视频监控系统解决方案

智慧工地视频监控系统解决方案赋能传统监控“大脑”思考能力,工地现有视频监控借助智慧工地视频监控系统可以实现对工地现场施工作业的及时识别预警,保障现场作业人员的人身安全及施工企业的现场财产安全,提升施工单位的工地智能化管理水平及安全施工效率。随着科技的发展,…

软件工具推荐-2-ssh终端工具-mobaxterm

官网 https://mobaxterm.mobatek.net/ 功能 社区免费版本,几乎没啥限制 文件上传 可视化操作

Vue引入vxe-table(一个功能非常强大的表格组件)

github介绍:https://github.com/x-extends/vxe-table Vue2版本对应vxe3版本,Vue3版本对应vxe4版本 vxe3版本的官网地址:https://vxetable.cn/v3/#/table/start/install终端下载:npm install vxe-table@v3在main.js文件中引入 3.引入一个内部图标测试一下,<vxe-icon na…

Linux下编译Azerothcore源码

前言 终于开始介绍Linux下如何编译AzerothCore源码了,本文编译和架设方法较为繁琐和细致,含Ubuntu、Debian和Docker(相较之前的Docker教程来说本文是手动版),且涉及到搭建注册网站和对外开放服务部分,故再次声明:本网站均为技术研究,若参考本网站教程搭建对外服务,我均…

Docker编译Azerothcore源码

维基百科 Docker 是一个开放源代码软件,是一个开放平台,用于开发应用、交付(shipping)应用、运行应用。 Docker允许用户将基础设施(Infrastructure)中的应用单独分割出来,形成更小的颗粒(容器),从而提高交付软件的速度。 Docker容器与虚拟机类似,但二者在原理上不同…

读人工智能全传02图灵测试

读人工智能全传02图灵测试1. 图灵测试 1.1. 模仿游戏 1.2. 20世纪40年代末至50年代初,第一台计算机的出现引发了一场公开辩论,辩论主题就是这一现代科学奇迹的潜力如何 1.2.1. 这场辩论中最瞩目的贡献当归属于一本名叫《控制论》的书,由麻省理工学院数学教授诺伯特维纳(Norb…

ubuntu apt update 提示 The repository ‘http://xxx Release‘ does not have a Release file

sudo apt update && sudo apt upgrade -y提示 报错 E: The repository ‘http://xxx Release‘ does not have a Release file.编辑文件 /etc/apt/sources.list, 添加下面代码保存 deb http://nl3.archive.ubuntu.com/ubuntu jammy main restricted universe multivers…

处理器SDK Linux软件开发

处理器SDK Linux软件开发 https://software-dl.ti.com/jacinto7/esd/processor-sdk-linux-edgeai/TDA4VM/08_06_01/exports/docs/devices/TDA4VM/linux/index.html 1.概述 欢迎使用处理器SDK Linux版TDA4VM! SDK提供软件和工具,让用户在德州仪器的边缘人工智能应用处理器上有…

jira修改RoadMap里的时间格式,硬核日期格式化

jira修改roadMap里的时间格式 在插件目录找到portfolio-plugin-9.16.1.jar将他下载到本地 使用zip解压软件解压jar包 全局搜索 DD/MM/YY 将其替换YYYY/MM/DD修改后效果图全局搜索 return${l()(o.getUTCDate().toString(),2,"0")}/${t} 替换 return ${o.getUTCMonth()…

不同网站检测到的ip不同

背景 最近在使用某个接口时出现了问题,大致是根据ip查询地址。 于是使用查询ip的网站,发现ip各有不同。大致上是有三种ip。 探讨 经过查询,比较合理的解释是,运营商有多个网络出口,根据访问的网站不同,使用的网络出口也不同,因此不同的网站分别使用了不同的ip去访问,因…

全网最适合入门的面向对象编程教程:08 类和对象的Python实现-@property装饰器:把方法包装成属性

本文主要对@property 装饰器的基本定义、使用场景和使用方法进行了介绍,同时介绍了setter装饰器和deleter装饰器的应用场景和语法。全网最适合入门的面向对象编程教程:08 类和对象的 Python 实现-@property 装饰器:把方法包装成属性 摘要: 本文主要对@property 装饰器的基本…

Java 异常 随机数 包装类

异常,随机数,包装类,日期类正如 “人无完人”一样,程序也不是完美的,它总会存在这样那样的问题,而有些问题并不是能够通过程序员开发更好的代码来解决的,如果我们忽视它,可能就会造成程序的终止,甚至是系统的崩溃。因此,我们需要想办法来合理的解决它,这就是Java中异常…

DataWhale暑期夏令营第一期——大模型技术方向task2笔记

Task 2 笔记 数据分析 可以先通过对标签中各个项进行数据分析(使用values_count方法),可以得到主要任务的各个指标的值分布情况。 我认为这一步的作用:帮助理解数据。 大模型的本质还是概率生成,通过prompt提示词去进行生成Baseline优化思路 1.数据处理角色合并:将同一个…

基于Bootstrap Blazor开源的.NET通用后台权限管理系统

前言 今天大姚给大家分享一个基于Bootstrap Blazor开源的.NET通用后台权限管理系统,后台管理页面兼容所有主流浏览器,完全响应式布局(支持电脑、平板、手机等所有主流设备),可切换至 Blazor 多 Tabs 模式,权限控制细化到网页内任意元素(按钮、表格、文本框等等):Boots…