在cmd.exe中设置或修改(系统范围)环境变量


13

我正在寻找一种从命令行添加和/或修改和/或删除环境变量的便捷方法。特别是,我有时会发现自己需要在cmd.exe中添加一些变量。

如果有人向我展示了一种非GUI方式进行修改(即:添加新目录),我将不胜感激 %PATH% 变量。

这种变化应该是永久性的,而不仅仅是持续时间 cmd 会话。


1
我认为你会发现一个问题就是大多数的变化 常驻 全系统 环境变量 要求 用户会话的注销/登录(或重新引导)以使用修改后的值。
quack quixote

Answers:


8

使用reg命令直接操作注册表变量的Old School方法就是钱。这是你如何做到的:

reg add HKCU\Environment /v PATH /d "%addonpath%;%path%" /f

把它扔进一个名为apath.bat的单行脚本中,如下所示:

@echo off
reg add HKCU\Environment /v PATH /d "%~dp0;%path%" /f

然后,您需要提供的是您在调用脚本时添加的新目录的路径,并且您已拨入:

例如:apathy.bar%addon path%

虽然欣奇是对的。如果您使用Vista或更高版本,最好的方法是使用SETX命令,该命令旨在允许我们传播环境变量,而不会有使用reg命令直接操作注册表的风险,如果命令可以保存您的机器,你操纵ENV变量足以在飞行中使用它。


此命令是否需要重启?
Juzer Ali

不,但您必须使用新的(cmd)流程。
mike

1
对我来说,它确实需要重启?为什么?我在Windows XP,sp3上。
Changwang Zhang

14

你可以使用setx。

用户变量:

SETX PATH "%PATH%;C:\MyDir"

系统变量:

SETX PATH "%PATH%;C:\MyDir" /M

我相信SETX自Vista以来就可用,但我在XP上。
René Nyffenegger

你可以从Vista机器上复制setx.exe。可能不会工作,但它可能会。
quack quixote

2
SETX是Windows Server 2003资源工具的一部分。您只需将其添加到system32目录或任何其他添加到您的路径(鸡蛋鸡蛋!)。
paradroid

我需要/ M部分,所以我可以修改系统变量,而不是用户。谢谢!
sfat

两个指定的命令都是错误的为什么? Windows实际上维护两个PATH值:系统范围和每用户。当你输入 echo %PATH%,你看到它们结合在一起,就像 <system path>;<user path>。因此,第一个命令将强制系统路径的当前项出现在用户路径中(这不是那么糟糕),而第二个命令将导致用户路径的当前项出现在系统路径中(这是不可接受的)。
Sasha

1

你可以使用 HKEY_CURRENT_USER\Software\Microsoft\Command Processor\Autorun 注册表项指向批处理文件,允许您进行半永久性更改而无需深入研究神秘的设置对话框。


据我所知,这只会影响cmd.exe的后续调用(没有/ d标志),但不会影响整个系统或其他(随后调用的)进程。
René Nyffenegger

那是正确的。我发现这是一个优势,意味着你可以做更多的事情,而不必担心不知道该做什么的不同过程。然而,它将在任何交互式提示中工作,这总是很好:P
Phoshi

1

如果您不想使用GUI(如在控制面板,系统,高级,环境变量,PATH中),您可以使用 REG 设置 HKCU\Environment\PATH

  • 更新 %PATH%
  • REG ADD HKCU\Environment /v PATH /t REG\_EXPAND\_SZ /d "%PATH%" /f

/f 强制覆盖现有值,这样您就不必以交互方式回答问题。

编辑: %PATH% 需要引用。

编辑: 值得注意的是,这可能需要重启或重新登录才能生效。虽然在GUI中更改它会立即生效(对于新的 cmd.exe 会话)。

参考: http://support.microsoft.com/kb/104011

如参考文献中所述,如果您想编写一些代码,可以发送WM_SETTINGCHANGE,这应该避免登录/注销要求。


这将非常有用。但是,如果我查询该变量,它不会返回任何内容。
PA.

人力资源管理。在XP Pro SP3英语上,我得到了我的PATH: REG QUERY HKCU\Environment /v PATH
opello

它是用户特定的路径,而不是系统范围的路径。不知道那个人住在哪里。它们可以设置为相同的东西,但通常包含单独的东西(并且您的工作路径是两者的合并)。
quack quixote

对,它在HKCU。链接的Microsoft KB文章具有两个注册表位置。
opello

1
这几乎是我正在寻找...如果有一种方法也从cmd.exe发送WM_SETTINGCHANGE。
René Nyffenegger

0

在当前cmd.exe进程中更改路径很容易:

PATH c:\MyNewDirectory;%PATH%

您可以随时通过HELP PATH获取有关PATH命令的帮助。


1
这不仅对会议有益吗?
JL.

是的,这不会在会话中持续存在。
John T

JL是对的,我一直在寻找一个永久的解决方案。我已经相应地编辑了我的问题。
René Nyffenegger

0

对于真正永久的系统范围更改,您确实需要使用系统控制面板(也称为我的电脑 - &gt;属性 - >高级 - >环境变量,用于WinXP)。那里的设置会影响整个系统,包括Explorer shell中的GUI程序。

如果您只需要这些更改 cmd.exe shell,您可以运行批处理文件,在启动cmd.exe窗口时设置它们。 Phoshi的回答 提到了 HKEY_CURRENT_USER\Software\Microsoft\Command Processor\Autorun,这似乎是一个很好的选择 - 很容易进行小的更改,并在需要时从命令行重新运行。但这不会影响GUI窗口或Explorer shell。

我真的很惊讶 Sysinternals的 没有一个有用的实用程序来做到这一点。也许另一个 PStools 可以做到?


0

很多方法都是这样做的。 REG ADD是一个或REG IMPORT(使用另一台计算机中导出的.REG文件)。 SETX / M是另一个。您也可以使用组策略首选项(对于大量计算机来说最轻松的方式)将其推出


0

这里没有提到的另一个想法,创建一个autohotkey脚本,它将启动控制面板并为您输入。如果您已经是AHK用户,它会很好用:-)

https://autohotkey.com/board/topic/63210-modify-system-path-gui/

还有什么关于编辑hklm / system / currentcontrolset001 / control / session manager / environment:path key?但是同样的密钥在hklm / system / currentcontrolset002和hklm / system / currentcontrolset下。看来这可能是正确的,在这里: https://stackoverflow.com/questions/3304463/how-do-i-modify-the-path-environment-variable-when-running-an-inno-setup-install

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.