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

我已经使用环境变量对话框添加了它。

但当我在控制台输入:

C:\>path

它不会显示新的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

我有两个问题:

为什么会发生这种情况?我做错什么了吗? 另外,如何使用控制台(并以编程方式,使用批处理文件)向PATH变量添加目录?


当前回答

控制面板的一个更好的选择是使用SourceForge的免费程序Pathenator。

但是,它只适用于。net 4.0或更高版本的系统,如Windows 7、Windows 8或Windows 10。

其他回答

警告:此解决方案可能会破坏您的PATH和系统的稳定性。作为副作用,它将合并用户和系统PATH,并将PATH截断为1024个字符。此命令的效果是不可逆转的。首先备份PATH。有关更多信息,请参阅评论。 不要盲目地复制粘贴。请谨慎使用。

你可以使用setx命令永久地添加一个路径到path:

setx /M path "%path%;C:\your\path\here\"

如果您想设置用户PATH而不是系统PATH,请删除/M标志。

注:

setx命令仅适用于Windows 7及以上版本。 您应该从提升的命令提示符运行此命令。 如果您只想为当前会话更改它,请使用set。

如果您运行命令cmd,它将更新该命令窗口的所有系统变量。

如何从cmd.exe/Run…打开环境变量窗口对话框

SystemPropertiesAdvanced,点击“环境变量”,没有UAC rundll32 sysdm。cpl,EditEnvironmentVariables直接,可能触发UAC

Windows中的环境变量工具可以直接启动吗?关于服务器故障。

如何从资源管理器打开环境变量窗口

右键点击“这台电脑” 点击“属性” 在弹出窗口的左侧面板上,点击“高级系统设置” 点击“高级”选项卡 点击窗口底部的“环境变量”按钮

您也可以在开始菜单搜索中搜索变量。

参考环境变量窗口的图片:

Windows 10

通过

Windows 7

通过

Windows XP

通过

关于第2点,我使用了一个简单的批处理文件,它为我填充PATH或其他环境变量。因此,默认情况下不存在任何环境变量的污染。这个批处理文件可以从任何地方访问,所以我可以输入:

mybatchfile

输出:

-- Here all environment variables are available

And:

php file.php

我会用PowerShell代替!

使用PowerShell将一个目录添加到PATH,执行以下操作:

$PATH = [Environment]::GetEnvironmentVariable("PATH")
$xampp_path = "C:\xampp\php"
[Environment]::SetEnvironmentVariable("PATH", "$PATH;$xampp_path")

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

[Environment]::SetEnvironmentVariable("PATH", "$PATH;$xampp_path", "Machine")

在PowerShell脚本中,您可能希望在添加到PATH之前检查是否存在C:\xampp\php(以防之前已经添加了它)。你可以用if条件句把它包装起来。

所以把它们放在一起:

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

更好的是,可以创建一个泛型函数。只需提供您希望添加的目录:

function AddTo-Path{
param(
    [string]$Dir
)

    if( !(Test-Path $Dir) ){
        Write-warning "Supplied directory was not found!"
        return
    }
    $PATH = [Environment]::GetEnvironmentVariable("PATH", "Machine")
    if( $PATH -notlike "*"+$Dir+"*" ){
        [Environment]::SetEnvironmentVariable("PATH", "$PATH;$Dir", "Machine")
    }
}

你可以通过打磨来让事情变得更好。例如,使用Test-Path确认目录确实存在。