Created
October 12, 2017 20:45
-
-
Save xantiagoma/632afe3767d74a8a5fd4fb2d84532386 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
@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 . |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment