SETX
和有什么区别SET
?
根据我的理解:
两者都用于设置环境变量,
SETX
用于用户变量。
SET
用于 shell 变量。
答案1
恐怕事情没那么简单。正如您所说,环境变量不受范围限制,但您说得对,比较动词时,变量中值的生命周期是不同的。
set
修改当前 shell(窗口)的环境值,更改立即生效,但只是暂时的。更改不会影响正在运行的其他 shell,并且一旦关闭 shell,新值就会丢失,直到您再次运行 set。
setx
永久修改该值,这会影响所有未来的 shell,但不会修改已在运行的 shell 的环境。您必须退出 shell 并重新打开它,更改才会生效,但该值将保持修改状态,直到您再次更改它。
请参阅此处的示例:http://batcheero.blogspot.com/2008/02/set-and-setx.html
答案2
实际上,我们可以在三个范围内设置变量:
1. Shell
2. 用户
3. 系统(机器)或全局
SET:创建或更新当前临时的 shell 范围。
C:\Users\977246>set /?
Displays, sets, or removes cmd.exe environment variables.
SET [variable=[string]]
variable Specifies the environment-variable name.
string Specifies a series of characters to assign to the variable.
Type SET without parameters to display the current environment variables.
SETX :创建或更新当前用户环境变量以使其永久有效。
C:\Users\977246>setx /?
SetX has three ways of working:
Syntax 1:
SETX [/S system [/U [domain\]user [/P [password]]]] var value [/M]
Syntax 2:
SETX [/S system [/U [domain\]user [/P [password]]]] var /K regpath [/M]
Syntax 3:
SETX [/S system [/U [domain\]user [/P [password]]]]
/F file {var {/A x,y | /R x,y string}[/M] | /X} [/D delimiters]
Description:
Creates or modifies environment variables in the user or system
environment. Can set variables based on arguments, regkeys or
file input.
To remove the variable set value to empty string as follows
Example: setx path ""
在 GUI 用户和系统环境变量中。
答案3
添加其他答复者遗漏的一点。
要设置系统环境变量而不是用户环境变量,我们只需要使用 setx 命令中的 /m 选项并从提升的(管理员)命令提示符运行它。
setx variable value /m
示例:以管理员身份打开命令提示符并运行
setx Path "%Path%;C:\Users\User\Libs" /m
说明:上述命令将把“C:\Users\User\Libs”附加到已经存在的路径变量(系统环境变量)。
如果没有/米参数,它将仅更改或创建用户级路径变量。
从 setx 用户手册中,
/M 指定应在系统范围 (HKEY_LOCAL_MACHINE) 环境中设置变量。默认是在 HKEY_CURRENT_USER 环境下设置变量。
答案4
setx.exe
是一个设置用户/系统环境变量的程序注册表,用于将来的进程创建。set
是显示过程当前进程的PEB中参数块中的环境中的环境变量(使用 显示用户和系统变量以及当前进程或父进程定义的变量set
),以及允许当前进程在其中定义更多的变量,并且可以从进程资源管理器中查看对环境的更改。
cmd /c set variable=value
将为其创建的子进程设置变量cmd.exe
(该子进程将自身附加到父cmd.exe
控制台窗口并且不分配自己的变量,并继承父进程的环境),因此当您set
在同一窗口内执行之后的操作时它不会生效,因为它指的是父进程cmd.exe
。顶级进程直接从注册表继承其环境并explorer.exe
动态更新其环境变量(与大多数其他应用程序不同),因此当您setx
它甚至不会更新当前进程环境时,只有注册表(由读取explorer.exe
)或explorer.exe
进程由设置环境变量的 Windows API 函数更新(可能性较小),以便未来打开的cmd.exe
继承explorer.exe
的环境,因为它们是子进程。