DOS命令添加, 删除, 查询系统环境变量(永久/临时生效)


DOS命令添加, 删除, 查询系统环境变量(永久/临时生效)


参考:
cmd - Is there a command to refresh environment variables from the command prompt in Windows? - Stack Overflow  
https://stackoverflow.com/questions/171588/is-there-a-command-to-refresh-environment-variables-from-the-command-prompt-in-w


1、修改注册表的方法要重启/注销/重启explorer进程才生效(永久的)

reg add "HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment" /v path /d "%path%;C:\" /f


2、使用WMIC,立即生效(永久的)(不影响已经打开的cmd, 只影响新打开的cmd)

wmic ENVIRONMENT create name="test1",username="<system>",VariableValue="test_val1"           新增变量

wmic ENVIRONMENT where "name='temp'" get UserName,VariableValue    获取变量
wmic ENVIRONMENT where "name='test1' and username='<system>'" set VariableValue="%path%;e:\tools"      修改变量
wmic ENVIRONMENT where "name='test1'" delete     删除变量


3、要在批处理中立即生效(只是临时的,退出批处理后消失),

批处理中加一句:

path=%path%;C:\





如果使用了上面的第2个方法(WMIC命令), 想要给当前正在运行的cmd刷新修改后的环境变量, 2个办法:

方法1:

::  在批处理脚本中添加以下代码即可
@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 | set /p dummy="Reading environment variables from registry. Please wait... "

goto main

:: Set one environment variable from registry key
:SetFromReg
    "%WinDir%\System32\Reg" QUERY "%~1" /v "%~2" > "%TEMP%\_envset.tmp" 2>NUL
    for /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

:main
    echo/@echo off >"%TEMP%\_env.cmd"

    :: Slowly generating final file
    call :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 System
    call :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 sign
    echo/set "Path=%%Path_HKLM%%;%%Path_HKCU%%" >> "%TEMP%\_env.cmd"

    :: Cleanup
    del /f /q "%TEMP%\_envset.tmp" 2>nul
    del /f /q "%TEMP%\_envget.tmp" 2>nul

    :: Set these variables
    call "%TEMP%\_env.cmd"

    echo | set /p dummy="Done"
    echo .




方法2:

以下代码保存为resetvars.vbs

Set oShell = WScript.CreateObject("WScript.Shell")
filename = oShell.ExpandEnvironmentStrings("%TEMP%\resetvars.bat")
Set objFileSystem = CreateObject("Scripting.fileSystemObject")
Set oFile = objFileSystem.CreateTextFile(filename, TRUE)

set oEnv=oShell.Environment("System")
for each sitem in oEnv 
    oFile.WriteLine("SET """ & sitem & """")
next
path = oEnv("PATH")

set oEnv=oShell.Environment("User")
for each sitem in oEnv 
    oFile.WriteLine("SET """ & sitem & """")
next

path = path & ";" & oEnv("PATH")
oFile.WriteLine("SET ""PATH=" & path & """")
oFile.Close

在需要刷新环境变量的批处理中添加以下代码:

@echo off
%~dp0resetvars.vbs
call "%TEMP%\resetvars.bat"





以下批处理是通过操作注册表来添加, 删除, 查询系统环境变量


::DOS命令添加, 查询系统环境变量 
@echo off
echo 添加java环境变量
set regpath=HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment
set evname=JAVA_HOME
set javapath=c:\java\jdk
reg add "%regpath%" /v %evname% /d %javapath% /f

echo.
echo 查询path环境变量
REG QUERY "HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment" /v Path

echo.
echo 查询evname环境变量
REG QUERY "HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment" /v %evname%|findstr jdk

echo.
echo 获取path环境变量的具体值(具体值中不能有空格)
::delims=后面有一个空格
for /f "tokens=3 delims= " %%a in ('REG QUERY "HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment" /v Path') do (
  set "a=%%a"
  echo %%a
)

echo.
echo 获取evname环境变量的具体值(具体值中不能有空格)
::delims=后面有一个空格
for /f "tokens=3 delims= " %%a in ('REG QUERY "HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment" /v %evname%') do (
  set "a=%%a"
  echo %%a
)

echo.
echo 删除java环境变量
reg delete "%regpath%" /v "%evname%" /f
pause>nul
exit



                
  • 2
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
批处理脚本可以用来设置系统环境变量。根据引用\[1\]和引用\[2\]的内容,可以使用以下方法来设置系统环境变量: 1. 批处理脚本添加环境变量: - 创建一个批处理脚本,比如"set_env.bat"。 - 在脚本中使用`reg add`命令来添加环境变量,例如`reg add "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment" /v JAVA_HOME /d "C:\Java" /f`。这个命令将在注册表中添加名为"JAVA_HOME"的环境变量,并将其值设置为"C:\Java"。 - 使用`pause`命令来暂停脚本的执行,以便查看结果。 2. 批处理脚本删除环境变量: - 创建一个批处理脚本,比如"remove_env.bat"。 - 在脚本中使用`reg delete`命令来删除环境变量,例如`reg delete "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment" /v JAVA_HOME /f`。这个命令将从注册表中删除名为"JAVA_HOME"的环境变量。 - 使用`pause`命令来暂停脚本的执行,以便查看结果。 需要注意的是,执行这些批处理脚本需要管理员权限,可以右键点击脚本文件并选择"以管理员身份运行"。引用\[3\]中提到了一些关于管理员权限的注意事项。 希望这些信息对您有帮助! #### 引用[.reference_title] - *1* [批处理设置系统环境变量(JDK)](https://blog.csdn.net/swazer_z/article/details/60577281)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [WINDOWS下批处理设置环境变量](https://blog.csdn.net/qs521/article/details/100112098)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [批处理 设置系统path环境变量,相同路径不重复设置](https://blog.csdn.net/qq_21808961/article/details/86759502)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值