Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Windows 如何从cmd永久更新系统路径变量?_Windows_Path_Cmd - Fatal编程技术网

Windows 如何从cmd永久更新系统路径变量?

Windows 如何从cmd永久更新系统路径变量?,windows,path,cmd,Windows,Path,Cmd,如前所述,我们可以使用setx 但是这个命令只能将更改为用户路径变量,而不是系统变量 我们如何在全系统范围内执行类似的命令 键入setx/?获取基本命令帮助。您将很容易发现: /M Specifies that the variable should be set in the system wide (HKEY_LOCAL_MACHINE) environment

如前所述,我们可以使用
setx

但是这个命令只能将更改为用户路径变量,而不是系统变量

我们如何在全系统范围内执行类似的命令


键入
setx/?
获取基本命令帮助。您将很容易发现:

/M                     Specifies that the variable should be set in
                       the system wide (HKEY_LOCAL_MACHINE)
                       environment. The default is to set the
                       variable under the HKEY_CURRENT_USER
                       environment.
您需要从提升的命令提示符运行此命令。右键单击
cmd
快捷方式并选择
以管理员身份运行

例如

警告:

我们可能会破坏当前系统的PATH变量。确保在修改之前备份其值

来自powershell

setx /M PATH "$($env:path);c:\program files\mynewprogram"

%PATH%的一个问题是它包含用户的路径。如果您不介意Powershell,可以运行以下命令

$p = [Environment]::GetEnvironmentVariable("PATH", [EnvironmentVariableTarget]::Machine);
[Environment]::SetEnvironmentVariable("PATH", $p + ";C:\MyPath", [EnvironmentVariableTarget]::Machine);

如果要在用户级别向PATH环境变量添加某些位置,请在命令行上使用以下命令:

setx PATH ^%PATH^%;"C:\Program Files\Something\bin"
为什么会有奇怪的语法? 首先,您不希望展开系统路径变量,而是将其保留为一个符号,否则您将不会参与将来对系统路径变量的添加。因此,您必须用^引用%个字符

如果在命令脚本中使用此选项,则必须使用double%%而不是^%

“包含一个包含空格的字符串。如果没有空格,可以省略引号


添加的字符串必须不带空格直接跟随,因此整个内容构成setx命令的一个参数。

pathman
可能是比
setx
更好的选择,因为它是专门为操作路径而设计的。特别是,使用
setx
使用嵌入的环境变量引用中断路径nd
pathman
没有(据我所知)。有人不可避免地会说:“哇,那个编辑框太小了,我可以修复它!”!“这是非常非常有意的(是的,你也是英特尔)。而且与setx没有任何关系。@HarryJohnston请将你的答案放在一个单独的答案中,以便审查和接受,如果这显示了更好的解决方案。
setx
可能会将该值截断为1024个字符。(至少我在
Windows7EnterpriseX64 SP1
上是这么说的)。为了避免截断,请使用这个答案,因为它可能与
$p = [Environment]::GetEnvironmentVariable("PATH", [EnvironmentVariableTarget]::Machine);
[Environment]::SetEnvironmentVariable("PATH", $p + ";C:\MyPath", [EnvironmentVariableTarget]::Machine);
setx PATH ^%PATH^%;"C:\Program Files\Something\bin"