从cmd.exe中设置一个持久的环境variables

我必须在不同的Windows机器上设置环境variables,但我不想被困扰,通过在“我的电脑”属性屏幕上手动更改它们,

我想要从命令行执行一个batch file。 据我所知,使用set只会改变我将在命令窗口中调用的进程的variables。

我想确定它,所以稍后,当运行一个新的进程时,它将使用我设置的新的设置。 有没有办法从命令行做到这一点?

环境variables的MSDN文档告诉你该怎么做:

要以编程方式添加或修改系统环境variables,请将它们添加到HKEY_LOCAL_MACHINE \ System \ CurrentControlSet \ Control \ Session Manager \ Environmentregistry项中,然后广播一个WM_SETTINGCHANGE消息,并将lParam设置为string“Environment”。 这使应用程序(如shell)能够获取更新。

你当然需要pipe理员权限来做到这一点。 我知道没有办法从Windows批量广播Windows消息,所以你需要编写一个小程序来做到这一点。

使用SETX命令 (注意'x'后缀)来设置在cmd窗口closures后保持的variables。

虽然值得一读的是如果你打印使用( setx /? )时显示的“注释”,特别是:

2)在本地系统上,由该工具创build或修改的variables将在未来的命令窗口中可用,但在当前CMD.exe命令窗口中不可用。

3)在远程系统上,通过此工具创build或修改的variables将在下次login会话中可用。

在PowerShell中,使用[Environment] :: SetEnvironmentVariable命令。

 ' SetVar.vbs Sub sety(wsh, action, typey, vary, value) Dim wu Set wu = wsh.Environment(typey) wui = wu.Item(vary) Select Case action Case "ls" WScript.Echo wui Case "del" On Error Resume Next wu.remove(vary) On Error Goto 0 Case "set" wu.Item(vary) = value Case "add" If wui = "" Then wu.Item(vary) = value ElseIf InStr(UCase(";" & wui & ";"), UCase(";" & value & ";")) = 0 Then wu.Item(vary) = value & ";" & wui End If Case Else WScript.Echo "Bad action" End Select End Sub Dim wsh, args Set wsh = WScript.CreateObject("WScript.Shell") Set args = WScript.Arguments Select Case WScript.Arguments.Length Case 3 value = "" Case 4 value = args(3) Case Else WScript.Echo "Arguments - 0: ls,del,set,add; 1: user,system, 2: variable; 3: value" value = "```" End Select If Not value = "```" Then ' 0: ls,del,set,add; 1: user,system, 2: variable; 3: value sety wsh, args(0), args(1), UCase(args(2)), value End If