在Windows中将目录添加到PATH环境变量

Mp *_*ega 494 windows command-line path environment-variables

我试图在Windows中添加C:\xampp\php到我的系统PATH环境变量.

我已经使用Environment Variables对话框添加了它.

但是当我输入我的控制台时:

C:\>path
Run Code Online (Sandbox Code Playgroud)

它不显示新C:\xampp\php目录:

PATH=D:\Program Files\Autodesk\Maya2008\bin;C:\Ruby192\bin;C:\WINDOWS\system32;C:\WINDOWS;
C:\WINDOWS\System32\Wbem;C:\PROGRA~1\DISKEE~2\DISKEE~1\;c:\Program Files\Microsoft SQL
Server\90\Tools\binn\;C:\Program Files\QuickTime\QTSystem\;D:\Program Files\TortoiseSVN\bin
;D:\Program Files\Bazaar;C:\Program Files\Android\android-sdk\tools;D:\Program Files\
Microsoft Visual Studio\Common\Tools\WinNT;D:\Program Files\Microsoft Visual Studio\Common
\MSDev98\Bin;D:\Program Files\Microsoft Visual Studio\Common\Tools;D:\Program Files\
Microsoft Visual Studio\VC98\bin
Run Code Online (Sandbox Code Playgroud)

我有两个问题:

  1. 为什么会这样?有什么我做错了吗?
  2. 另外,如何PATH使用控制台(以编程方式,使用批处理文件)向我的变量添加目录?

Jim*_*imR 925

选项1

PATH使用GUI 更改后,关闭并重新打开控制台窗口.

这是有效的,因为只有在更改后启动的程序才会看到新的PATH.

选项2

在打开的命令窗口中执行以下命令:

set PATH=%PATH%;C:\your\path\here\
Run Code Online (Sandbox Code Playgroud)

此命令附加C:\your\path\here\到当前PATH.

打破它:

  • set- 仅为当前cmd会话更改cmd环境变量的命令 ; 其他程序和系统不受影响.
  • PATH=- 表示这PATH是要临时更改的环境变量.
  • %PATH%;C:\your\path\here\- 该%PATH%部分扩展为当前值PATH,;C:\your\path\here\然后连接到它.这成了新的PATH.

  • @Ilya:在MyComputer-> Properties-> Advanced-> Env Variables-> Path中更改路径后,我打算让你打开控制台窗口.一些Windows应用程序将在它们启动后传播环境变量,有些则不会.WinXP cmd.exe没有. (16认同)
  • @David天宇Wong刚刚发现"SETX是一种持续改变的方式,就像对话框一样." 所以SETX命令应该这样做 (11认同)
  • 如果我退出控制台,我重新运行,我必须重置路径.知道如何永久改变这种变化吗? (7认同)
  • @David天宇Wong如果您按照"我的电脑">"属性">"高级">"环境变量">"路径".并将目录添加到该字符串的末尾,它将保留.确保在进行更改后打开控制台. (2认同)
  • 如果您添加一个注释,说明选项 2 是会话范围的,而不是系统范围的,那就更好了。 (2认同)

Naf*_*ipt 192

警告:此解决方案可能会破坏您的PATH以及系统的稳定性.作为副作用,它将合并您的用户和系统PATH,并将PATH截断为1024个字符.此命令的效果是不可逆转的.首先备份PATH.有关更多信息,请参阅注释.

不要盲目地复制粘贴它.谨慎使用.

您可以使用以下命令永久添加路径:PATHsetx

setx /M path "%path%;C:\your\path\here\"
Run Code Online (Sandbox Code Playgroud)

/M如果要设置用户PATH而不是系统,请删除该标志PATH.

笔记:

  • setx命令仅在Windows 7及更高版本中可用.
  • 您应该从提升的命令提示符运行此命令.

  • 如果您只想为当前会话更改它,请使用set.

  • __WARNING__:由于使用了'%PATH%`变量,该命令将全局env变量与用户变量合并.不是吗?这可能会产生不必要的副作用,尤其是使用/ M开关时 (9认同)
  • 另请参见[使用setx克服1024个字符的限制](http://superuser.com/q/387619) (8认同)
  • `SETX/M路径"%path%; C:\ Program Files(x86)\ Git\bin \"`在机器级别设置PATH值 (7认同)
  • 为什么这不是公认的答案?我想大多数人都想永久地设定自己的道路...... (6认同)
  • __WARNING 2:__`%PATH%`变量可能与环境变量不同步,因为它在命令提示符启动时加载,之后从不重新加载(即使执行setx命令).它也可以通过以前执行的脚本在本地更改. (4认同)
  • 我只是使用该命令[**F***** UP我的整个系统路径**](https://i.stack.imgur.com/1EAG2.png)。糟糕,非常糟糕。 (3认同)
  • **再次警告**:由于此方法会合并/截断数据,请务必**先备份您的 %PATH% 变量值**。我知道,这似乎很明显,但我不习惯在我们这个时代这样具有破坏性和永久性的行为(特别是因为我多年来一直在玩路径)。虽然它只是搞砸了我的 PATH,但我希望能够恢复它,而且......我不是 :)。这个答案值得更明确的**警告**,关于这个方法将同时“添加数据”、“截断数据”和“不可逆”的事实。 (2认同)

Han*_*ant 136

这只会修改注册表.现有流程不会使用这些值.如果此更改之后启动并且未从其父级继承旧环境,则新进程将执行此操作.

您没有指定启动控制台会话的方式.确保这一点的最佳方法是退出命令shell并再次运行它.然后它应该继承更新的PATH.

  • 嗯,不,它真的只是修改了注册表.在控制面板对话框中执行此操作应该有点明显,而不是使用PATH命令执行命令提示符.如果您愿意,可以使用SysInternals的Process Monitor轻松观察它的作用.使用PATH*不相同,当控制台关闭时,您所做的任何更改都将丢失.SETX是一种进行持久更改的方法,如对话框. (9认同)
  • 这是对的.在获取新的环境变量之前,您必须重新启动控制台会话. (3认同)

zar*_*zar 61

您不需要任何setsetx命令,只需打开终端并键入:

PATH
Run Code Online (Sandbox Code Playgroud)

这显示了PATH变量的当前值.现在要添加目录吗?只需输入:

PATH %PATH%;C:\xampp\php
Run Code Online (Sandbox Code Playgroud)

如果出于任何原因想要清除PATH变量(根本没有路径或删除其中的所有路径),请键入:

PATH ;
Run Code Online (Sandbox Code Playgroud)

更新

就像Danial Wilson在下面的评论中指出的那样,它只在当前会话中设定路径.要设置路径永久使用setx但要注意,虽然它永久设置路径但不在当前会话中,因此您必须启动新命令行以查看更改,此处有更多信息.

要检查环境变量是否存在或查看其值,请使用ECHO commnad:

echo %YOUR_ENV_VARIABLE%
Run Code Online (Sandbox Code Playgroud)

  • 我认为这仅适用于cmd会话的实例,使用setx永久更改它 (11认同)
  • 不要使用setx!您可能会截断路径变量,从而丢失了您花费时间设置的许多其他路径.注意上面的警告. (3认同)
  • @STWilson,太迟看到你的评论了! (3认同)
  • **不要**在此加上引号。例如,调用`PATH%PATH%; C:\ Program Files \ ...`而不是`PATH“%PATH%; C:\ Program Files \ ...”` (2认同)

Ife*_*kwo 42

在这个PowerShell时代,我会像这样编辑PATH:

$PATH = [Environment]::GetEnvironmentVariable("PATH")
$xampp_path = "C:\xampp\php"
[Environment]::SetEnvironmentVariable("PATH", "$PATH;$xampp_path")
Run Code Online (Sandbox Code Playgroud)

要在机器范围内为所有用户设置变量,最后一行应如下所示:

[Environment]::SetEnvironmentVariable("PATH", "$PATH;$xampp_path", "Machine")
Run Code Online (Sandbox Code Playgroud)

在PowerShell脚本中,您可能希望C:\xampp\php在添加到PATH之前检查是否存在(如果之前已添加).您可以将其包装在if条件中.

所以把它们放在一起:

$PATH = [Environment]::GetEnvironmentVariable("PATH")
$xampp_path = "C:\xampp\php"
if( $PATH -notlike "*"+$xampp_path+"*" ){
    [Environment]::SetEnvironmentVariable("PATH", "$PATH;$xampp_path", "Machine")
}
Run Code Online (Sandbox Code Playgroud)

  • 若要使用`Machine`参数调用`SetEnvironmentVariable`,您需要以管理员权限打开PowerShell (3认同)
  • @abbood你要找的是`$ env:userprofile`. (3认同)
  • 这应该是正确的答案 (2认同)
  • 您还应该在“ GetEnvironmentVariable”的调用中指定“ user”或“ machine”。否则,`$ PATH`将同时包含注册表的用户和机器部分的值,这将在再次存储路径变量时不必要地破坏路径变量。 (2认同)

icc*_*c97 32

更安全的SETX

@ Nafscript的初步SETX答案的所有评论点头.

  • SETX默认情况下会更新您的用户路径.
  • SETX ... /M将更新您的系统路径.
  • %PATH% 包含附加了用户路径的系统路径

警告

  1. 备份你的PATH - SETX将截断你的垃圾超过1024个字符
  2. 不要调用SETX %PATH%;xxx - 将系统路径添加到用户路径中
  3. 不要调用SETX %PATH%;xxx /M - 将用户路径添加到系统路径中
  4. 使用过多的批处理文件会导致失明1

ss64 SETX页面有一些非常好的例子.重要的是,它指向注册表项为SETXvs的位置SETX /M

用户变量:

HKCU\Environment

系统变量:

HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment

使用说明

附加到用户 PATH

append_user_path.cmd

@ECHO OFF
REM usage: append_user_path "path"
SET Key="HKCU\Environment"
FOR /F "usebackq tokens=2*" %%A IN (`REG QUERY %Key% /v PATH`) DO Set CurrPath=%%B
ECHO %CurrPath% > user_path_bak.txt
SETX PATH "%CurrPath%";%1
Run Code Online (Sandbox Code Playgroud)

附加到系统 PATH

append_system_path.cmd.必须以管理员身份运行.

(除了不同KeySETX /M修饰符之外,它基本相同)

@ECHO OFF
REM usage: append_system_path "path"
SET Key="HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment"
FOR /F "usebackq tokens=2*" %%A IN (`REG QUERY %Key% /v PATH`) DO Set CurrPath=%%B
ECHO %CurrPath% > system_path_bak.txt
SETX PATH "%CurrPath%";%1 /M
Run Code Online (Sandbox Code Playgroud)

备择方案

最后,ss64 SETX页面推荐使用一个名为SETENV的改进版本,该版本拆分设置用户或系统环境变量.


1.严格来说并非如此


ncl*_*ord 24

晚到派对 - 如果您已经在要添加到PATH的目录中,则会很方便.

set PATH=%PATH%;%CD%

编辑:根据评论 - 适用于标准的Windows cmd,但不适用于PowerShell.

对于powershell,%CD%相当于[System.Environment]::CurrentDirectory


Tho*_*eca 21

如果您使用setx错误输入路径怎么办?最好的方法是通过Windows UI 控制面板 - >所有控制面板项目 - >系统 - >高级系统设置 - >环境变量

向下滚动到Path并选择Edit.您还可以将其复制并粘贴到您喜欢的编辑器中,以便您可以查看整个路径并更轻松地编辑它.


Mp *_*ega 6

除了所有答案之外,如果您想要一个不错的 GUI 工具来编辑您的 Windows 环境变量,您可以使用Rapid Environment Editor

尝试一下!使用起来很安全,很棒!

  • Windows 10 现在显着改进了路径环境变量编辑器。他们只用了 20 年的时间来解决这个问题。 (3认同)

wom*_*omd 6

使用gtools路径

它以直观的方式做事。例如:

pathed /REMOVE "c:\my\folder"
pathed /APPEND "c:\my\folder"
Run Code Online (Sandbox Code Playgroud)

它无需生成新的 cmd 即可显示结果!

  • gtools 可以使用例如 [scoop](https://scoop.sh/) 和 oneliner 轻松安装:“scoop install gtools”,以防这对其他人有用 (2认同)

hev*_*evi 5

  • 命令行更改不会是永久性的,并且会在控制台关闭时丢失。
  • 该路径的工作原理类似于先到先得。
  • 您可能希望覆盖其他已包含的可执行文件。例如,如果您的路径上已经有另一个版本,并且您想添加不同的版本而不对路径进行永久更改,则应该将该目录放在命令的开头。

覆盖已经包含的可执行文件;

设置 PATH=C:\xampp\php;%PATH%;