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.