如果我set PATH=%PATH%;C:\\Something\\bin从命令行(cmd.exe)执行然后执行,echo %PATH%我会看到此字符串已添加到PATH。如果我关闭并打开命令行,则该新字符串不在PATH中。
set PATH=%PATH%;C:\\Something\\bin
cmd.exe
echo %PATH%
将来如何从命令行永久更新PATH,而不仅限于当前进程?
我不想通过转到“系统属性”→“高级”→“环境变量”并在那里更新PATH来执行此操作。
有关如何执行此操作的文档可以在MSDN上找到。关键摘录是这样的:
要以编程方式添加或修改系统环境变量,请将它们添加到HKEY_LOCAL_MACHINE \ System \ CurrentControlSet \ Control \ Session Manager \ Environment注册表项中,然后广播一条WM_SETTINGCHANGE消息,其中lParam设置为字符串“ Environment”。这样,外壳程序之类的应用程序就可以获取你的更新。
请注意,你的应用程序将需要提升的管理员权限才能修改此密钥。
你可以在评论中指出你很乐意仅修改每个用户的环境。通过编辑HKEY_CURRENT_USER \ Environment中的值来执行此操作。和以前一样,请确保你广播了一条WM_SETTINGCHANGE消息。
你应该能够使用JNI注册表类在Java应用程序中轻松地完成此操作。
你可以使用:
setx PATH "%PATH%;C:\\Something\\bin"
但是,setx会将存储的字符串截断为1024个字节,可能会损坏PATH。
setx
/M将更改PATHin HKEY_LOCAL_MACHINE而不是HKEY_CURRENT_USER。换句话说,是系统变量,而不是用户变量。例如:
PATHin HKEY_LOCAL_MACHINE
HKEY_CURRENT_USER
SETX /M PATH "%PATH%;C:\your path with spaces"
你必须记住,新的PATH在你当前的中不可见cmd.exe。
但是,如果你查看注册表或使用新的注册表cmd.exe,则"set p"可以看到新值。
"set p"