问题

如果我从cmd执行set PATH=%PATH%;C:\\Something\\bin然后执行echo %PATH%我看到在路径中添加了此字符串。如果我关闭并打开cmd,则该新字符串不在PATH中。对于将来的所有进程,如何从cmd永久更新PATH,而不仅仅是针对当前进程?我不想通过转到系统属性 - >高级 - >环境变量并在那里更新PATH来做到这一点。

必须从java应用程序(我的其他question)执行此命令。


#1 热门回答(141 赞)

你可以使用:

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

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

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

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

你必须记住,新的PATH在你当前的cmd.exe中不可见。

但是,如果你在注册表或新的cmd.exewith"set p"上查看,你可以看到新值。


#2 热门回答(39 赞)

有关如何执行此操作的文档,请访问MSDN。关键提取是这样的:

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

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

你在评论中表明你很乐意仅修改每用户环境。通过编辑值HKEY_CURRENT_USER \ Environment来执行此操作。如前所述,请确保广播aWM_SETTINGCHANGE消息。

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


#3 热门回答(32 赞)

我提醒不要使用该命令

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

修改PATH变量,因为它的实现的"功能"。在目前的许多(大多数?)安装中,变量将很长-setx将截断存储的字符串为1024字节,可能会破坏PATH(参见讨论here)。

(我已经专门签署了这个问题,因此缺乏网站声誉,直接评论12月5日发布的答案。感谢beresfordt添加了这样的评论)


原文链接