两个用来刷新Windows环境变量让会话即时生效的刷新脚本分享

news/2024/12/5 4:09:58/

环境变量刷新脚本:RefreshEnv.bat 和 RefreshEnv.ps1

在Windows系统中,环境变量对于程序的正常运行至关重要。当安装新软件或修改系统设置后,环境变量可能会发生变化,但这些变化通常需要重启命令提示符或PowerShell会话才能生效。为了解决这个问题,我们提供了两个脚本: RefreshEnv.bat (用于命令提示符和PowerShell会话) 和 RefreshEnv.ps1 (用于PowerShell),它们可以快速刷新当前会话的环境变量。

RefreshEnv.bat

这是一个批处理脚本,用于在命令提示符(cmd.exe)中刷新环境变量。

@echo off
::
:: RefreshEnv.cmd
::
:: Batch file to read environment variables from registry and
:: set session variables to these values.
::
:: With this batch file, there should be no need to reload command
:: environment every time you want environment changes to propagate::echo "RefreshEnv.cmd only works from cmd.exe, please install the Chocolatey Profile to take advantage of refreshenv from PowerShell"
echo | set /p dummy="Refreshing environment variables from registry for cmd.exe. Please wait..."goto main:: Set one environment variable from registry key
:SetFromReg"%WinDir%\System32\Reg" QUERY "%~1" /v "%~2" > "%TEMP%\_envset.tmp" 2>NULfor /f "usebackq skip=2 tokens=2,*" %%A IN ("%TEMP%\_envset.tmp") do (echo/set "%~3=%%B")goto :EOF:: Get a list of environment variables from registry
:GetRegEnv"%WinDir%\System32\Reg" QUERY "%~1" > "%TEMP%\_envget.tmp"for /f "usebackq skip=2" %%A IN ("%TEMP%\_envget.tmp") do (if /I not "%%~A"=="Path" (call :SetFromReg "%~1" "%%~A" "%%~A"))goto :EOF:mainecho/@echo off >"%TEMP%\_env.cmd":: Slowly generating final filecall :GetRegEnv "HKLM\System\CurrentControlSet\Control\Session Manager\Environment" >> "%TEMP%\_env.cmd"call :GetRegEnv "HKCU\Environment">>"%TEMP%\_env.cmd" >> "%TEMP%\_env.cmd":: Special handling for PATH - mix both User and Systemcall :SetFromReg "HKLM\System\CurrentControlSet\Control\Session Manager\Environment" Path Path_HKLM >> "%TEMP%\_env.cmd"call :SetFromReg "HKCU\Environment" Path Path_HKCU >> "%TEMP%\_env.cmd":: Caution: do not insert space-chars before >> redirection signecho/set "Path=%%Path_HKLM%%;%%Path_HKCU%%" >> "%TEMP%\_env.cmd":: Cleanupdel /f /q "%TEMP%\_envset.tmp" 2>nuldel /f /q "%TEMP%\_envget.tmp" 2>nul:: capture user / architectureSET "OriginalUserName=%USERNAME%"SET "OriginalArchitecture=%PROCESSOR_ARCHITECTURE%":: Set these variablescall "%TEMP%\_env.cmd":: Cleanupdel /f /q "%TEMP%\_env.cmd" 2>nul:: reset user / architectureSET "USERNAME=%OriginalUserName%"SET "PROCESSOR_ARCHITECTURE=%OriginalArchitecture%"echo | set /p dummy="Finished."echo .

RefreshEnv.ps1

这是一个PowerShell脚本,用于在PowerShell会话中刷新环境变量。

# RefreshEnv.ps1
#
# PowerShell脚本用于从注册表读取环境变量并设置会话变量Write-Host "正在从注册表刷新cmd.exe的环境变量。请稍候..." -NoNewlinefunction Set-FromReg {param ([string]$regPath,[string]$name,[string]$varName)$value = Get-ItemProperty -Path $regPath -Name $name -ErrorAction SilentlyContinueif ($value) {Set-Item -Path Env:$varName -Value $value.$name}
}function Get-RegEnv {param ([string]$regPath)$vars = Get-Item -Path $regPathforeach ($var in $vars.Property) {if ($var -ne "Path") {Set-FromReg $regPath $var $var}}
}# 获取系统和用户环境变量
Get-RegEnv "HKLM:\System\CurrentControlSet\Control\Session Manager\Environment"
Get-RegEnv "HKCU:\Environment"# 特殊处理PATH - 混合用户和系统路径
$path_HKLM = (Get-ItemProperty -Path "HKLM:\System\CurrentControlSet\Control\Session Manager\Environment").Path
$path_HKCU = (Get-ItemProperty -Path "HKCU:\Environment").Path
$env:Path = "$path_HKLM;$path_HKCU"# 保存原始用户名和架构
$OriginalUserName = $env:USERNAME
$OriginalArchitecture = $env:PROCESSOR_ARCHITECTURE# 重置用户名和架构
$env:USERNAME = $OriginalUserName
$env:PROCESSOR_ARCHITECTURE = $OriginalArchitectureWrite-Host "完成。"

使用方法

  1. RefreshEnv.bat:

    • 将脚本保存为RefreshEnv.bat
    • 在命令提示符中,切换到脚本所在目录
    • 运行命令: RefreshEnv.bat
  2. RefreshEnv.ps1:

    • 将脚本保存为RefreshEnv.ps1
    • 在PowerShell中,切换到脚本所在目录
    • 运行命令: .\RefreshEnv.ps1

主要功用和意义

  1. 即时更新: 这两个脚本允许用户在不重启命令行或PowerShell会话的情况下,立即更新环境变量。

  2. 提高效率: 避免了频繁重启命令行工具的需要,特别是在安装新软件或修改系统设置后。

  3. 跨平台兼容: 提供了针对cmd和PowerShell两种常用命令行环境的解决方案。

  4. 保持一致性: 确保命令行环境与系统设置保持同步,减少因环境变量不一致导致的问题。

  5. 自动化友好: 这些脚本可以轻松集成到其他自动化流程中,确保环境变量始终是最新的。

通过使用这些脚本,用户可以更加高效地管理他们的开发和系统管理工作,减少因环境变量不一致导致的问题,提高工作效率。


http://www.ppmy.cn/news/1552463.html

相关文章

WPF DataGrid 列隐藏

Window节点加上下面的 <Window.Resources><FrameworkElement x:Key"ProxyElement" DataContext"{Binding}" /></Window.Resources>然后随便加一个隐藏控件 <ContentControl Content"{StaticResource ProxyElement}" Visi…

视觉经典网络学习02_池化层感受野

目录 一、池化层 池化API使用 多通道池化计算 池化层的作用 二、感受野 感受野的作用 三、其他卷积知识扩展 1、二维卷积 单通道 多通道 2、三维卷积 3、反卷积 4、空洞卷积(膨胀卷积) 5、可分离卷积 空间可分离卷积 深度可分离卷积 6、分组卷积 一、池化层 …

BFD双向转发检测协议——BFD+VRRP配置实现

BFD双向转发检测协议 Tips&#xff1a; 一种全网统一、检测迅速、监控网络中链路或者IP路由的双向转发连通状况,并为上层应用提供服务的技术。联动功能由检测模块、Track和应用模块三部分组成。查看bfd会话命令&#xff1a;dis bfd session all 本次实验模拟配置BFDVRRP AR…

考研408《计算机网络》复习笔记,第三章《计算机网络分类》

一、按分布范围分类 看下图即可&#xff0c;灰色的不重要&#xff0c;【广域网】和【局域网】是重点&#xff01;&#xff01; 【广域网和局域网的关系】 局域网通过路由器&#xff0c;接入广域网 【个域网】 二、按传输技术分类 广播式网络&#xff1a; 【类似 “某人的群…

利用Python爬虫获取淘宝关键词接口的深入解析

引言 随着电子商务的蓬勃发展&#xff0c;淘宝作为中国最大的电商平台之一&#xff0c;其数据挖掘和分析成为了众多商家和研究者关注的焦点。淘宝关键词接口作为获取商品信息的重要途径&#xff0c;能够帮助我们洞察市场趋势、优化商品策略等。本文将详细介绍如何利用Python爬…

如何参加华为欧拉考试?

华为欧拉考试主要针对的是华为欧拉&#xff08;EulerOS/openEuler&#xff09;操作系统的认证考试&#xff0c;这一认证体系旨在培养和认证具备基于欧拉操作系统进行企业级应用运行基础环境搭建、管理和调测能力的工程师以及云计算架构师。以下是对华为欧拉考试的详细介绍&…

【测试工具JMeter篇】JMeter性能测试入门级教程(七):JMeter断言

一、前言 在 JMeter 中&#xff0c;断言元件&#xff08;Assertion&#xff09;用于验证测试结果是否符合预期。断言元件可以检查服务器的响应数据&#xff0c;以确保它们符合期望的模式或值&#xff0c;从而验证性能测试脚本的正确性。断言元件通常在每个请求的响应中添加&am…

@Cacheable加缓存导致的跳过校验 self自调用

Cacheable加缓存导致的跳过校验 & self自调用 Cacheable加缓存导致的跳过校验 Service public class DataServiceImpl implements DataService {// 这个属性指向当前类的代理对象Autowiredprivate DataService self;OverrideCacheable(value "dataCache", key…