当前位置: 首页 > news >正文

Batch脚本中的环境变量沙盒:setlocal与endlocal全解析

Batch脚本中的环境变量沙盒:setlocal与endlocal全解析

在Windows的批处理(Batch)脚本世界中,setlocalendlocal是两个至关重要的命令,它们为脚本中环境变量的修改提供了一个隔离的环境。这就像是为变量创建了一个临时的“沙盒”,在这个沙盒里,你可以自由地改变环境变量,而不必担心这些改变会影响到脚本外部的系统环境。本文将深入探讨这两个命令的作用和使用场景,并通过实际代码示例,展示如何利用它们来增强脚本的灵活性和安全性。

一、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 EnableExtensionssetlocal 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%

在这个示例中,即使PATHsetlocal块中被修改,endlocal也会将其恢复到原始值。

四、延迟变量扩展(Enabledelayedexpansion)

setlocalendlocal一起使用的另一个强大功能是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的嵌套使用

setlocalendlocal可以嵌套使用,每个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
六、总结

setlocalendlocal是批处理脚本中控制环境变量作用域的强大工具。通过使用这些命令,你可以编写出更加模块化、安全和易于调试的脚本。它们为变量提供了一个隔离的环境,使得变量的修改不会影响到脚本的其他部分或外部系统环境。

本文通过详细的解释和丰富的代码示例,展示了setlocalendlocal的基本用法和高级技巧。掌握这些知识,你将能够更有效地控制批处理脚本中环境变量的行为,编写出更加健壮和灵活的自动化脚本。

相关文章:

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++ 智能指针实战分析

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

3D Web轻量引擎HOOPS Web Platform赋能AEC行业数字化,高效渲染与多格式支持!

在建筑、工程和施工&#xff08;AEC&#xff09;行业&#xff0c;数字化转型和高效协作正变得越来越重要。为应对日益复杂的项目需求和不断提升的质量标准&#xff0c;AEC企业需要一种强大的工具来实现高效的3D可视化和数据管理。HOOPS Web Platform作为一款综合性3D开发平台&a…...

学术英语写作为什么会成为留学生的压力?

对留学党来说&#xff0c;从出国前的标准化测试、申请文书&#xff0c;到留学后的学业要求&#xff0c;都需要用到学术英语写作。可以说&#xff0c;学术英语写作对留学生涯有着重要影响。 然而&#xff0c;这却是令很多中国学生头疼的问题&#xff0c;中国学生往往在数学、物…...

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安装包 快速下载通道&#xff1a; 达梦镜像包 2.将安装包上传至服务器&#xff0c;并加载镜像 拷…...

npm常用命令大全(非常详细)

npm&#xff08;Node Package Manager&#xff09;是Node.js的包管理工具&#xff0c;它允许你安装、更新、删除和管理Node.js项目的依赖。 以下是npm的一些常用命令&#xff0c;按照不同的功能进行分类和解释&#xff1a; 1. 初始化项目 init # 初始化一个新的npm项目&…...

东西方文化与管理探讨汉捷咨询汉捷咨询

东西方文化的发展不同&#xff0c;对于管理实践的影响也不相同。汉捷咨询从东西方文化的差异以管理体系的差异进行深层次分析&#xff0c;希望这些分析对企业家的管理实践起到良好的启发作用。 东西方文化的差异 东西方人在思维方式上存在的差异&#xff0c;其根源是什么呢&a…...

行业案例 | 智能终端设备的数据基础从哪儿来?

智能终端的快速发展让我们在许多科幻电影中看到的“未来场景”正在一步步变为现实&#xff1a;智能家居正在解放我们的双手&#xff0c;工业机器人让生产效率倍增&#xff0c;智能穿戴设备让我们便利地感知自身与外部的连结……然而&#xff0c;要想让万物“智联”&#xff0c;…...

《Windows API每日一练》6.1 鼠标基础知识

本节我们讲述鼠标的一些基础知识。 本节必须掌握的知识点&#xff1a; 鼠标 6.1.1 鼠标 鼠标是1964年由Douglas Engelbart发明的&#xff0c;用来取代由键盘输入的繁琐指令&#xff0c;简化电脑操作。早期的鼠标是单键鼠标&#xff0c;只有一个键&#xff0c;后来逐步改进为双…...

闹大了!OpenAI 宣布终止提供API服务

事件背景&#xff1a; OpenAI宣布终止对中国提供API服务&#xff0c;影响中国大陆的API开发者。受影响的开发者收到OpenAI的警告信&#xff0c;要求7月9日后停止服务。 OpenAI的业务和营收&#xff1a; 2023年营收16亿美元&#xff0c;2024年上半年年化营收达34亿美元。营收来…...

java里的空接口实现它有什么用?

我们在看源码时&#xff0c;经常会看到一些空接口&#xff0c;这些空接口里没有一个方法&#xff0c;实现它有什么作用呢&#xff1f;让我们先找几个常见的空接口看看。 一、Serializable接口 在Java中&#xff0c;一个常见的空接口就是java.io.Serializable。 public inter…...

Spring的jar包下载(最新版6.0版本)

1.在Spring官网的projects下面点击spring-framework 2.进入github官网 3.进入github后往下滑&#xff0c;点击Spring Framework Artifacts 4.往下滑找到 点击 5.在左边先点击Artifacts&#xff0c;在右边找到 libs-snapshot&#xff0c;展开libs-snapshot&#xff08;之前其他…...

解决Java中数据库连接泄露的技术

解决Java中数据库连接泄露的技术 大家好&#xff0c;我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编&#xff0c;也是冬天不穿秋裤&#xff0c;天冷也要风度的程序猿&#xff01; 介绍 在Java应用程序中&#xff0c;数据库连接的泄露是一个常见且影响性能的…...

网页视频录制,分享3种好方法

随着互联网的飞速发展&#xff0c;视频内容在网页上的呈现与传播变得日益普遍。网页视频录制作为一种重要的技术手段&#xff0c;不仅方便了我们获取和保存网页上的视频内容&#xff0c;还为教育、娱乐、营销等多个领域提供了全新的应用可能。 但是网页视频怎么录制&#xff1…...

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 网段内,掩码长度为…...

深入剖析AI大模型:大模型时代的 Prompt 工程全解析

今天聊的内容&#xff0c;我认为是AI开发里面非常重要的内容。它在AI开发里无处不在&#xff0c;当你对 AI 助手说 "用李白的风格写一首关于人工智能的诗"&#xff0c;或者让翻译模型 "将这段合同翻译成商务日语" 时&#xff0c;输入的这句话就是 Prompt。…...

使用VSCode开发Django指南

使用VSCode开发Django指南 一、概述 Django 是一个高级 Python 框架&#xff0c;专为快速、安全和可扩展的 Web 开发而设计。Django 包含对 URL 路由、页面模板和数据处理的丰富支持。 本文将创建一个简单的 Django 应用&#xff0c;其中包含三个使用通用基本模板的页面。在此…...

以下是对华为 HarmonyOS NETX 5属性动画(ArkTS)文档的结构化整理,通过层级标题、表格和代码块提升可读性:

一、属性动画概述NETX 作用&#xff1a;实现组件通用属性的渐变过渡效果&#xff0c;提升用户体验。支持属性&#xff1a;width、height、backgroundColor、opacity、scale、rotate、translate等。注意事项&#xff1a; 布局类属性&#xff08;如宽高&#xff09;变化时&#…...

postgresql|数据库|只读用户的创建和删除(备忘)

CREATE USER read_only WITH PASSWORD 密码 -- 连接到xxx数据库 \c xxx -- 授予对xxx数据库的只读权限 GRANT CONNECT ON DATABASE xxx TO read_only; GRANT USAGE ON SCHEMA public TO read_only; GRANT SELECT ON ALL TABLES IN SCHEMA public TO read_only; GRANT EXECUTE O…...

NFT模式:数字资产确权与链游经济系统构建

NFT模式&#xff1a;数字资产确权与链游经济系统构建 ——从技术架构到可持续生态的范式革命 一、确权技术革新&#xff1a;构建可信数字资产基石 1. 区块链底层架构的进化 跨链互操作协议&#xff1a;基于LayerZero协议实现以太坊、Solana等公链资产互通&#xff0c;通过零知…...

Device Mapper 机制

Device Mapper 机制详解 Device Mapper&#xff08;简称 DM&#xff09;是 Linux 内核中的一套通用块设备映射框架&#xff0c;为 LVM、加密磁盘、RAID 等提供底层支持。本文将详细介绍 Device Mapper 的原理、实现、内核配置、常用工具、操作测试流程&#xff0c;并配以详细的…...

Java 二维码

Java 二维码 **技术&#xff1a;**谷歌 ZXing 实现 首先添加依赖 <!-- 二维码依赖 --><dependency><groupId>com.google.zxing</groupId><artifactId>core</artifactId><version>3.5.1</version></dependency><de…...

【Linux】Linux 系统默认的目录及作用说明

博主介绍&#xff1a;✌全网粉丝23W&#xff0c;CSDN博客专家、Java领域优质创作者&#xff0c;掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域✌ 技术范围&#xff1a;SpringBoot、SpringCloud、Vue、SSM、HTML、Nodejs、Python、MySQL、PostgreSQL、大数据、物…...

scikit-learn机器学习

# 同时添加如下代码, 这样每次环境(kernel)启动的时候只要运行下方代码即可: # Also add the following code, # so that every time the environment (kernel) starts, # just run the following code: import sys sys.path.append(/home/aistudio/external-libraries)机…...

HubSpot推出与ChatGPT的深度集成引发兴奋与担忧

上周三&#xff0c;HubSpot宣布已构建与ChatGPT的深度集成&#xff0c;这一消息在HubSpot用户和营销技术观察者中引发了极大的兴奋&#xff0c;但同时也存在一些关于数据安全的担忧。 许多网络声音声称&#xff0c;这对SaaS应用程序和人工智能而言是一场范式转变。 但向任何技…...