Batch脚本中的环境变量沙盒:setlocal与endlocal全解析
Batch脚本中的环境变量沙盒:setlocal与endlocal全解析
在Windows的批处理(Batch)脚本世界中,setlocal
和endlocal
是两个至关重要的命令,它们为脚本中环境变量的修改提供了一个隔离的环境。这就像是为变量创建了一个临时的“沙盒”,在这个沙盒里,你可以自由地改变环境变量,而不必担心这些改变会影响到脚本外部的系统环境。本文将深入探讨这两个命令的作用和使用场景,并通过实际代码示例,展示如何利用它们来增强脚本的灵活性和安全性。
一、setlocal与endlocal:定义局部环境变量
setlocal
命令标志着局部环境变量作用域的开始。在setlocal
和对应的endlocal
之间,你可以设置或修改变量,这些变量的改变不会影响脚本外部的环境。
示例代码:
@echo off
echo Original PATH:
echo %PATH%setlocal
set PATH=C:\Temp
echo Modified PATH within setlocal:
echo %PATH%endlocal
echo PATH after endlocal:
echo %PATH%
在上面的代码中,setlocal
之后修改的PATH
环境变量在endlocal
之后恢复到原始状态。
二、setlocal的高级用法
setlocal
不仅可以捕获环境变量的改变,还可以用于调整错误处理和命令扩展的行为。
- 启用或禁用命令扩展:使用
setlocal EnableExtensions
或setlocal DisableExtensions
来控制命令扩展的行为。 - 设置错误级别:
setlocal
可以捕获并修改ERRORLEVEL
,这对于条件逻辑非常有用。
示例代码:
@echo off
setlocal EnableExtensions
ver >NUL
if errorlevel 1 (echo Running on Windows 95/98/ME
) else (echo Running on Windows NT/2000/XP or later
)
endlocal
三、endlocal:恢复环境变量
endlocal
命令用于结束由setlocal
开始的作用域,它撤销在该作用域内对环境变量所做的所有更改,确保这些更改不会“泄漏”到脚本的其他部分或外部环境。
示例代码:
@echo off
set ORIGINAL_PATH=%PATH%setlocal
set PATH=C:\NewPath
echo PATH set to: %PATH%endlocal
echo PATH restored to: %PATH%
在这个示例中,即使PATH
在setlocal
块中被修改,endlocal
也会将其恢复到原始值。
四、延迟变量扩展(Enabledelayedexpansion)
与setlocal
和endlocal
一起使用的另一个强大功能是ENABLEDELAYEDEXPANSION
。当启用延迟变量扩展时,变量的值将在执行时才被替换,而不是在命令行解析时。
示例代码:
@echo off
setlocal EnableDelayedExpansion
set VAR=original
set VAR=newfor /l %%i in (1,1,3) do (set "COPY=!VAR!"echo Value of COPY: %%i = !COPY!set /p "VAR=New value: "
)endlocal
五、setlocal与endlocal的嵌套使用
setlocal
和endlocal
可以嵌套使用,每个setlocal
必须有对应的endlocal
,以确保环境变量的更改被正确地恢复。
示例代码:
@echo off
setlocal
set A=1
setlocal
set A=2
echo A inside second setlocal: %A%
endlocal
echo A after second endlocal: %A%
endlocal
六、总结
setlocal
和endlocal
是批处理脚本中控制环境变量作用域的强大工具。通过使用这些命令,你可以编写出更加模块化、安全和易于调试的脚本。它们为变量提供了一个隔离的环境,使得变量的修改不会影响到脚本的其他部分或外部系统环境。
本文通过详细的解释和丰富的代码示例,展示了setlocal
和endlocal
的基本用法和高级技巧。掌握这些知识,你将能够更有效地控制批处理脚本中环境变量的行为,编写出更加健壮和灵活的自动化脚本。
相关文章:
Batch脚本中的环境变量沙盒:setlocal与endlocal全解析
Batch脚本中的环境变量沙盒:setlocal与endlocal全解析 在Windows的批处理(Batch)脚本世界中,setlocal和endlocal是两个至关重要的命令,它们为脚本中环境变量的修改提供了一个隔离的环境。这就像是为变量创建了一个临时…...

AI引领创意潮流:高效生成图片,参考图助力,一键保存到指定文件夹
在这个数字与创意交融的时代,我们迎来了AI绘画的新纪元。借助先进的AI技术,我们不仅能够高效生成图片,还能在参考图的启发下,激发无限创意,让您的想象力在数字世界中自由翱翔。 首助编辑高手软件中的魔法智能绘图板块&…...

ADOP带你了解:数据中心的高速互联解决方案
随着大语言模型和AIGC的飞速发展,数据中心对于高速、高可靠性的网络连接需求日益增长。ADOP系列产品正是在这样的背景下应运而生,为现代数据中心提供了全面的连接解决方案。 ADOP系列产品概览 ADOP系列产品旨在为云、高性能计算、Web 2.0、企业、电信、…...

使用SpringBoot整合Servlet
一、SpringBoot和Servlet的整合 1、用注解WebServlet配置Servlet映射 创建一个SpringBoot的web工程,在工程用创建一个Servlet 2、在SpringBoot的启动类上加注解ServletComponentScan 二、额外的方式 1、不使用WebServlet配置Servlet映射 创建一个SpringBoot工…...
vue引入eachrts
1. 安装Echarts 使用npm npm install echarts --save 导入Echarts插件 import echarts from echarts Vue.prototype.$echarts echarts import echarts from echarts 我们来做个简单的实例首先需要一个容器装下Echarts <template><div id"list"…...

c++ 智能指针实战分析
一.智能指针的设计思路 智能指针是类模板,再栈上创建智能指针对象。把普通指针交给智能指针对象。智能指针对象过期时,调用析构函数释放普通指针的内存。 智能指针的类型 auto_ptr是C98的标准,c17已经弃用。unique_ptr、shared_ptr和weak_…...

3D Web轻量引擎HOOPS Web Platform赋能AEC行业数字化,高效渲染与多格式支持!
在建筑、工程和施工(AEC)行业,数字化转型和高效协作正变得越来越重要。为应对日益复杂的项目需求和不断提升的质量标准,AEC企业需要一种强大的工具来实现高效的3D可视化和数据管理。HOOPS Web Platform作为一款综合性3D开发平台&a…...
学术英语写作为什么会成为留学生的压力?
对留学党来说,从出国前的标准化测试、申请文书,到留学后的学业要求,都需要用到学术英语写作。可以说,学术英语写作对留学生涯有着重要影响。 然而,这却是令很多中国学生头疼的问题,中国学生往往在数学、物…...
docker 安装达梦8
背景 X86-64架构使用Docker安装dm8_20240422_x86_rh6_64_rq_std_8.1.3.100_pack2.tar 1.下载Docker安装包 达梦官网下载dm8_20240422_x86_rh6_64_rq_std_8.1.3.100_pack2.tar安装包 快速下载通道: 达梦镜像包 2.将安装包上传至服务器,并加载镜像 拷…...
npm常用命令大全(非常详细)
npm(Node Package Manager)是Node.js的包管理工具,它允许你安装、更新、删除和管理Node.js项目的依赖。 以下是npm的一些常用命令,按照不同的功能进行分类和解释: 1. 初始化项目 init # 初始化一个新的npm项目&…...
东西方文化与管理探讨汉捷咨询汉捷咨询
东西方文化的发展不同,对于管理实践的影响也不相同。汉捷咨询从东西方文化的差异以管理体系的差异进行深层次分析,希望这些分析对企业家的管理实践起到良好的启发作用。 东西方文化的差异 东西方人在思维方式上存在的差异,其根源是什么呢&a…...

行业案例 | 智能终端设备的数据基础从哪儿来?
智能终端的快速发展让我们在许多科幻电影中看到的“未来场景”正在一步步变为现实:智能家居正在解放我们的双手,工业机器人让生产效率倍增,智能穿戴设备让我们便利地感知自身与外部的连结……然而,要想让万物“智联”,…...
《Windows API每日一练》6.1 鼠标基础知识
本节我们讲述鼠标的一些基础知识。 本节必须掌握的知识点: 鼠标 6.1.1 鼠标 鼠标是1964年由Douglas Engelbart发明的,用来取代由键盘输入的繁琐指令,简化电脑操作。早期的鼠标是单键鼠标,只有一个键,后来逐步改进为双…...
闹大了!OpenAI 宣布终止提供API服务
事件背景: OpenAI宣布终止对中国提供API服务,影响中国大陆的API开发者。受影响的开发者收到OpenAI的警告信,要求7月9日后停止服务。 OpenAI的业务和营收: 2023年营收16亿美元,2024年上半年年化营收达34亿美元。营收来…...
java里的空接口实现它有什么用?
我们在看源码时,经常会看到一些空接口,这些空接口里没有一个方法,实现它有什么作用呢?让我们先找几个常见的空接口看看。 一、Serializable接口 在Java中,一个常见的空接口就是java.io.Serializable。 public inter…...

Spring的jar包下载(最新版6.0版本)
1.在Spring官网的projects下面点击spring-framework 2.进入github官网 3.进入github后往下滑,点击Spring Framework Artifacts 4.往下滑找到 点击 5.在左边先点击Artifacts,在右边找到 libs-snapshot,展开libs-snapshot(之前其他…...
解决Java中数据库连接泄露的技术
解决Java中数据库连接泄露的技术 大家好,我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编,也是冬天不穿秋裤,天冷也要风度的程序猿! 介绍 在Java应用程序中,数据库连接的泄露是一个常见且影响性能的…...

网页视频录制,分享3种好方法
随着互联网的飞速发展,视频内容在网页上的呈现与传播变得日益普遍。网页视频录制作为一种重要的技术手段,不仅方便了我们获取和保存网页上的视频内容,还为教育、娱乐、营销等多个领域提供了全新的应用可能。 但是网页视频怎么录制࿱…...
LeNet网络的实现
LeNet网络的实现 import torch from torch import nn from d2l import torch as d2lx 28 net nn.Sequential(nn.Conv2d(1, 6, kernel_size5, padding2), nn.Sigmoid(),nn.AvgPool2d(kernel_size2, stride2),nn.Conv2d(6, 16, kernel_size5), nn.Sigmoid(),nn.AvgPool2d(kerne…...
华为HCIP Datacom H12-821 卷6
1.单选题 下面是一台路由器的部分配置,关于该部分配置描述正确的是,[HUAWEllJip ip-prefix plpermit 10.0.192.0 8 greater-equal 17 less-equal 18 A、10.0.192.0/8 网段内,掩码长度为 20 的路由会匹配到该前缀列表,匹配规则为允许 B、10.0.192.0/8 网段内,掩码长度为…...

利用最小二乘法找圆心和半径
#include <iostream> #include <vector> #include <cmath> #include <Eigen/Dense> // 需安装Eigen库用于矩阵运算 // 定义点结构 struct Point { double x, y; Point(double x_, double y_) : x(x_), y(y_) {} }; // 最小二乘法求圆心和半径 …...

Docker 离线安装指南
参考文章 1、确认操作系统类型及内核版本 Docker依赖于Linux内核的一些特性,不同版本的Docker对内核版本有不同要求。例如,Docker 17.06及之后的版本通常需要Linux内核3.10及以上版本,Docker17.09及更高版本对应Linux内核4.9.x及更高版本。…...
Golang 面试经典题:map 的 key 可以是什么类型?哪些不可以?
Golang 面试经典题:map 的 key 可以是什么类型?哪些不可以? 在 Golang 的面试中,map 类型的使用是一个常见的考点,其中对 key 类型的合法性 是一道常被提及的基础却很容易被忽视的问题。本文将带你深入理解 Golang 中…...
Admin.Net中的消息通信SignalR解释
定义集线器接口 IOnlineUserHub public interface IOnlineUserHub {/// 在线用户列表Task OnlineUserList(OnlineUserList context);/// 强制下线Task ForceOffline(object context);/// 发布站内消息Task PublicNotice(SysNotice context);/// 接收消息Task ReceiveMessage(…...
可靠性+灵活性:电力载波技术在楼宇自控中的核心价值
可靠性灵活性:电力载波技术在楼宇自控中的核心价值 在智能楼宇的自动化控制中,电力载波技术(PLC)凭借其独特的优势,正成为构建高效、稳定、灵活系统的核心解决方案。它利用现有电力线路传输数据,无需额外布…...

【第二十一章 SDIO接口(SDIO)】
第二十一章 SDIO接口 目录 第二十一章 SDIO接口(SDIO) 1 SDIO 主要功能 2 SDIO 总线拓扑 3 SDIO 功能描述 3.1 SDIO 适配器 3.2 SDIOAHB 接口 4 卡功能描述 4.1 卡识别模式 4.2 卡复位 4.3 操作电压范围确认 4.4 卡识别过程 4.5 写数据块 4.6 读数据块 4.7 数据流…...
OkHttp 中实现断点续传 demo
在 OkHttp 中实现断点续传主要通过以下步骤完成,核心是利用 HTTP 协议的 Range 请求头指定下载范围: 实现原理 Range 请求头:向服务器请求文件的特定字节范围(如 Range: bytes1024-) 本地文件记录:保存已…...

现代密码学 | 椭圆曲线密码学—附py代码
Elliptic Curve Cryptography 椭圆曲线密码学(ECC)是一种基于有限域上椭圆曲线数学特性的公钥加密技术。其核心原理涉及椭圆曲线的代数性质、离散对数问题以及有限域上的运算。 椭圆曲线密码学是多种数字签名算法的基础,例如椭圆曲线数字签…...
数据库分批入库
今天在工作中,遇到一个问题,就是分批查询的时候,由于批次过大导致出现了一些问题,一下是问题描述和解决方案: 示例: // 假设已有数据列表 dataList 和 PreparedStatement pstmt int batchSize 1000; // …...
MySQL中【正则表达式】用法
MySQL 中正则表达式通过 REGEXP 或 RLIKE 操作符实现(两者等价),用于在 WHERE 子句中进行复杂的字符串模式匹配。以下是核心用法和示例: 一、基础语法 SELECT column_name FROM table_name WHERE column_name REGEXP pattern; …...