从cmd.exe设置持久环境变量

时间:2011-05-05 13:03:01

标签: windows batch-file environment-variables cmd

我必须在不同的Windows机器上设置环境变量,但我不想通过访问“我的电脑”的属性屏幕来手动更改它们

我想从命令行使用批处理文件执行此操作。据我所知,使用set只会更改我将在命令窗口中调用的进程的变量。

我想明确设置它,所以稍后,当运行一个新进程时,它将使用我设置的那些新设置。有没有办法从命令行执行此操作?

5 个答案:

答案 0 :(得分:158)

使用SETX command(注意'x'后缀)设置cmd窗口关闭后仍然存在的变量。

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

  

2)在本地系统上,此工具创建或修改的变量将在以后的命令窗口中可用,但在当前的CMD.exe命令窗口中不可用。

     

3)在远程系统上,此工具创建或修改的变量将在下次登录会话中可用。

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

答案 1 :(得分:18)

MSDN documentation for environment variables告诉您该怎么做:

  

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

您当然需要管理员权限才能执行此操作。我知道无法从Windows批处理中播放Windows消息,因此您需要编写一个小程序来执行此操作。

答案 2 :(得分:2)

' 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

答案 3 :(得分:0)

实际上,SET TEST_VARIABLE =值仅适用于当前过程,因此,SETX是必需的。在用户级别永久存储环境变量的快速示例。

  1. 在cmd中,SETX TEST_VARIABLE etc尚未应用(echo %TEST_VARIABLE%显示%TEST_VARIABLE%
  2. 快速检查:打开cmd,echo %TEST_VARIABLE%显示etc
  3. GUI检查:系统属性->高级->环境变量->用户变量->您应该看到变量TEST_VARIABLE的值为etc

答案 4 :(得分:0)

ListView(
  scrollDirection: Axis.horizontal,
  children: <Widget>[
    Container(
      decoration: BoxDecoration(
        image: DecorationImage(
          image: AssetImage('assets/fav.JPG'),
          fit: BoxFit.fitHeight,
        ),
      ),
    ),
    Container(
      decoration: BoxDecoration(
        image: DecorationImage(
          image: AssetImage('assets/fav.JPG'),
          fit: BoxFit.fitHeight,
        ),
      ),
    ),
  ],
)
相关问题