刷新环境变量

Lyd*_* Ch 12 windows command-line environment-variables

修改环境变量后如何刷新 Windows cmd shell?

即在 bash 我可以做“源〜/ .bashrc”

小智 7

我想完成Lance McCarthy\xe2\x80\x99s 的回答

\n

它是ChocolateyRefreshEnv.bat包管理器的一部分,因此如果您使用 Chocolatey,那么您就已经安装了。但您也可以直接从Chocolatey GitHub获取此批处理文件(原始数据链接)。将此文件保存到您的 PATH 中,然后从任何控制台运行即可更新环境。RefreshEnv.batrefreshenv

\n


小智 6

这实际上取决于您的环境变量的设置方式。例如,如果您在命令行中使用“SET”命令,则它仅影响当前实例。另一方面,诸如“SETX”之类的命令将永久调整环境变量的值。SETX 将确保 cmd 的所有未来实例都会看到更新。不会对当地环境造成影响。

如果环境变量由另一个应用程序设置并且未更新,通常最简单的方法是重新启动“explorer.exe”进程、注销并重新登录或重新启动。 本质上,您只需要告诉资源管理器重新加载环境变量即可。如果它是您开发的应用程序(例如安装程序),请确保它正在调用SendMessage (HWND_BROADCAST, WM_SETTINGCHANGE, 0, (LPARAM)"Environment");. 这告诉资源管理器刷新其环境变量的缓存。

这很重要,因为由另一个进程启动的应用程序从其父进程继承其环境变量。因此,如果您从资源管理器启动 cmd,您将获得资源管理器看到的变量。


aki*_*ira 0

这取决于您“设置”环境变量的位置。与您的 bash 示例等效的内容如下:

文件:env.bat

set FOO=bar
Run Code Online (Sandbox Code Playgroud)

现在你刷新它

% call env.bat
Run Code Online (Sandbox Code Playgroud)

但我认为你已经通过 windows-system-settings-dialog (或其名称是什么)完成了它。这样做的结果是您实际上更改了注册表。当您启动新进程时,这些注册表设置将映射到进程中。

因此,您可以启动一个新进程(在您的情况下为 cmd.exe),或者您可以读取反映您想要的更改的注册表项。您还可以编写一个小 .bat / .cmd 脚本,它从注册表获取环境并根据需要更改当前环境(如果我有兴趣,我会在午餐后执行此操作)。