在Windows 7(甚至XP)中,是否可以通过命令提示符在系统级别设置环境变量?我正在从一个升高的命令提示符运行。

当我使用set命令(set name=value)时,环境变量似乎只对命令提示符的会话有效。


XP支持工具(可以从XP光盘中安装)附带一个名为setx.exe的程序:

C:\Program Files\Support Tools>setx /?

SETX: This program is used to set values in the environment
of the machine or currently logged on user using one of three modes.

1) Command Line Mode: setx variable value [-m]
   Optional Switches:
    -m  Set value in the Machine environment. Default is User.

...
For more information and example use: SETX -i

我认为Windows 7实际上附带了setx作为标准安装的一部分。


在命令行中使用setx.exe设置JAVA_HOME的简单示例:

setx JAVA_HOME "C:\Program Files (x86)\Java\jdk1.7.0_04"

这将为当前用户设置环境变量“JAVA_HOME”。如果你想为所有用户设置一个变量,你必须使用选项“/m”(或者-m,在Windows 7之前)。

这里有一个例子:

setx /m JAVA_HOME "C:\Program Files (x86)\Java\jdk1.7.0_04"

注意:该命令需要以Administrator用户执行。

注意:请确保在命令行管理窗口中运行命令setx


对于XP,我使用了一个叫做“RAPIDEE”(快速环境编辑器)的(免费/捐赠软件)工具,但是SETX对于Win 7来说已经足够了(我以前不知道这个)。


如果你需要删除一个变量,你可以在http://barnyard.syr.edu/~vefatica上使用Vincent Fatica提供的SETENV。 不是最近的(1998年),但仍然在Windows 7 x64上工作。


如果你通过SETX设置一个变量,你不能立即使用这个变量或它的变化。您必须重新启动希望使用它的进程。

使用下面的顺序在设置过程中直接设置它(对我来说,在设置全局变量后做一些init的东西的脚本中是完美的):

SET XYZ=test
SETX XYZ test

系统变量可以通过CMD和注册表设置 例如,reg查询“HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment”/v PATH

这里列出了所有常用的CMD代码和系统变量:通过CMD设置Windows系统环境变量。

打开CMD,输入Set

你会得到系统变量的所有值。

输入set java可以了解windows操作系统上安装的java的详细路径。


SetX是在大多数情况下都需要的命令。虽然可以使用REG或REGEDIT

使用注册表编辑命令,您可以避免SetX命令的一些限制-不同的数据类型,变量名称中包含=等等。

@echo off

:: requires admin elevated permissions
::setting system variable
REG ADD "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment" /v MyVar /D MyVal
::expandable variable
REG ADD "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment" /T REG_EXPAND_SZ /v MyVar /D MyVal


:: does not require admin permissions
::setting user variable
REG ADD "HKEY_CURRENT_USER\Environment" /v =C: /D "C:\\test"

REG是纯粹的注册表客户端,但也可以使用REGEDIT导入数据,尽管它只允许使用硬编码的值(或生成临时文件)。这里的示例是一个混合文件,它包含批处理代码和注册表数据(应该保存为。bat—注意是批处理;在.reg文件中用作注释时,作为分隔符被忽略):

REGEDIT4

; @ECHO OFF
; CLS
; REGEDIT.EXE /S "%~f0"
; EXIT

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment]
"SystemVariable"="GlobalValue"

[HKEY_CURRENT_USER\Environment]
"UserVariable"="SomeValue"