如何从Windows命令行永久更新PATH变量?

2022-08-31 08:36:05

如果我从命令行()执行,然后执行,我会看到这个字符串添加到PATH中。如果我关闭并打开命令行,则该新字符串不在 PATH 中。set PATH=%PATH%;C:\\Something\\bincmd.exeecho %PATH%

如何从命令行永久更新将来所有进程的 PATH,而不仅仅是当前进程?

我不想通过转到系统属性→高级→环境变量并在那里更新PATH来执行此操作。

此命令必须从 Java 应用程序执行(请参阅我的另一个问题)。


答案 1

您可以使用:

setx PATH "%PATH%;C:\\Something\\bin"

但是, 会将存储的字符串截断为 1024 个字节,从而可能损坏 PATH。setx

/M将更改 in 而不是 。换句话说,系统变量,而不是用户的变量。例如:PATHHKEY_LOCAL_MACHINEHKEY_CURRENT_USER

SETX /M PATH "%PATH%;C:\your path with spaces"

您必须记住,新的PATH在您当前的.cmd.exe

但是,如果您在注册表中或新的使用中查看,则可以看到新值。cmd.exe"set p"


答案 2

有关如何执行此操作的文档可以在 MSDN 上找到。关键提取是这样的:

要以编程方式添加或修改系统环境变量,请将它们添加到HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Session Manager\Environment注册表项,然后广播一条WM_SETTINGCHANGE消息,并将 lParam 设置为字符串“Environment”。这允许应用程序(如 shell)获取更新。

请注意,您的应用程序需要提升的管理员权限才能修改此密钥。

您在注释中指出,您很乐意仅修改每用户环境。为此,请在HKEY_CURRENT_USER\环境中编辑值。与以前一样,请确保广播WM_SETTINGCHANGE消息。

您应该能够使用 JNI 注册表类轻松地从 Java 应用程序中执行此操作。


推荐