博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Windows Bat脚本之变量延迟(Setlocal enabledelayedexpansion)
阅读量:6771 次
发布时间:2019-06-26

本文共 702 字,大约阅读时间需要 2 分钟。

先看一段代码:

@echo offset var1=6set var2=%var1%&echo %var2%pause

执行后的结果为:Echo处于关闭状态

刚看到这个结果后一脸懵逼,经过一番百度了解到原来Windows批处理处理机制是按行读取,每行执行前先做预处理(类似%var%都会被扩展到实际值),这就自然在执行第三行前已经被预处理成了:

set var2=6&echo

我们知道当单独输入echo,后面什么都不加的情况下是输出当前echo的开关状态,代码首行用了@echo off命令,这里自然是显示:Echo处于关闭状态。

好在Windows批处理提供了变量延迟机制(在代码前加入:Setlocal enabledelayedexpansion语句),即延迟变量扩展,这样在执行的时候还是:

set var2=%var1%&echo %var2%

不过这里有个规定,即在使用Setlocal enabledelayedexpansion时要对延迟变量使用!var!格式而不是%var%,完整代码:

@echo off&Setlocal enabledelayedexpansionset var1=6set var2=%var1%&echo !var2!pause

这样代码执行结果输出:6

注意:

  1. 用()括起来的算同一个行,即括号内的会同时被预处理,如if,for后面的();
  2. Setlocal enabledelayedexpansion作用于脚本,可使用endlocal提前结束作用范围;

转载于:https://www.cnblogs.com/Mst5u/p/10483507.html

你可能感兴趣的文章
PLSQL中有返回值的存储过程
查看>>
Etcd 架构与实现解析,网友回复:藏得太深
查看>>
微信分享域名被屏蔽拦截导致无法打开或显示已停止访问的原因及规避方案
查看>>
golang学习的点点滴滴:读写文件(面向对象版)
查看>>
数据库设计中的14个技巧
查看>>
mac php7.2安装swoole 4.0扩展
查看>>
新版火狐中的BossKey
查看>>
Cisco router 使用ssh
查看>>
动手实践 Linux VLAN - 每天5分钟玩转 OpenStack(13)
查看>>
四优势保障戴尔助力企业数据保护
查看>>
more
查看>>
信息收集之DNS信息收集 -- dnsrecon
查看>>
DBCP,CP30,proxool连接池在spring hibernate中的配置
查看>>
editplus如何修改日期格式
查看>>
设置urllib2不自动用系统的代理
查看>>
Linux learn(二)
查看>>
数据结构算法书籍推荐
查看>>
5月第2周中国.COM域名总量升至696万 净增近6万
查看>>
[Hibernate]有关jar文件
查看>>
spring+mybatis时会出现Cannot load JDBC driver class ${jdbc.driverClassName}'
查看>>