Saltar al contenido

¿Existe un comando para actualizar las variables de entorno desde el símbolo del sistema en Windows?

Ya no tienes que buscar más por todo internet porque llegaste al espacio justo, poseemos la respuesta que deseas sin problema.

Solución:

Puede capturar las variables de entorno del sistema con una secuencia de comandos vbs, pero necesita una secuencia de comandos bat para cambiar realmente las variables de entorno actuales, por lo que esta es una solución combinada.

Crear un archivo llamado resetvars.vbs que contiene este código, y guárdelo en la ruta:

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

cree otro nombre de archivo resetvars.bat que contenga este código, en la misma ubicación:

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

Cuando desee actualizar las variables de entorno, simplemente ejecute resetvars.bat


Apologética:

Los dos problemas principales que tuve para encontrar esta solución fueron

un. No pude encontrar una forma sencilla de exportar variables de entorno desde un script vbs de vuelta al símbolo del sistema, y

B. la variable de entorno PATH es una concatenación de las variables PATH del usuario y del sistema.

No estoy seguro de cuál es la regla general para las variables en conflicto entre el usuario y el sistema, por lo que elegí hacer que el usuario anule el sistema, excepto en la variable PATH que se maneja específicamente.

Utilizo el extraño mecanismo vbs+bat+temporary bat para evitar el problema de exportar variables desde vbs.

Nota: este script no elimina variables.

Esto probablemente se puede mejorar.

AGREGADO

Si necesita exportar el entorno de una ventana cmd a otra, use este script (llamémoslo exportvars.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("Process")
for each sitem in oEnv 
    oFile.WriteLine("SET " & sitem)
next
oFile.Close

Correr exportvars.vbs en la ventana que desea exportar desdeluego cambie a la ventana que desea exportar paray escriba:

"%TEMP%resetvars.bat"

Esto es lo que usa Chocolatey.

https://github.com/chocolatey/choco/blob/master/src/chocolatey.resources/redirects/RefreshEnv.cmd

@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%System32Reg" 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%System32Reg" 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 "HKLMSystemCurrentControlSetControlSession ManagerEnvironment" >> "%TEMP%_env.cmd"
    call :GetRegEnv "HKCUEnvironment">>"%TEMP%_env.cmd" >> "%TEMP%_env.cmd"

    :: Special handling for PATH - mix both User and System
    call :SetFromReg "HKLMSystemCurrentControlSetControlSession ManagerEnvironment" Path Path_HKLM >> "%TEMP%_env.cmd"
    call :SetFromReg "HKCUEnvironment" 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 .

En Windows 7/8/10, puede instalar Chocolatey, que tiene un script incorporado para esto.

Después de instalar Chocolatey, simplemente escriba refreshenv.

Si te ha resultado provechoso este artículo, te agradeceríamos que lo compartas con más seniors y nos ayudes a extender nuestra información.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *