不重启机器让windows环境变量生效的方法

776 阅读1分钟

process to refresh environment variables without reboot windows

 process to refresh environment variables without reboot windows

  • open cmd commend prompt window
  • input set PATH=C -> this will refresh the environment variables
  • close and restart cmd window
  • input echo %PATH% to test

You can also do SET prefix to see all variables with names starting with prefix.

示例:

C:\Users\Administrator>SET java
JAVA_HOME=D:\Program Files\Java\jdk1.8.0_172_hhhhhhh

直接输入set将打印所有环境变量

不重启直接更新环境变量

@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>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

    :: capture user / architecture
    SET "OriginalUserName=%USERNAME%"
    SET "OriginalArchitecture=%PROCESSOR_ARCHITECTURE%"

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

    :: Cleanup
    del /f /q "%TEMP%_env.cmd" 2>nul

    :: reset user / architecture
    SET "USERNAME=%OriginalUserName%"
    SET "PROCESSOR_ARCHITECTURE=%OriginalArchitecture%"

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

cmd - Is there a command to refresh environment variables from the command prompt in Windows? - Stack Overflow