我试图在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变量添加目录?


选项1

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

这是可行的,因为只有在更改之后启动的程序才能看到新的PATH。

选项2

此选项仅影响当前shell会话,而不会影响整个系统。在已打开的命令窗口中执行以下命令:

set PATH=%PATH%;C:\your\path\here\

该命令将C:\your\path\here\追加到当前路径。如果路径包含空格,则不需要包含引号。

分解一下:

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


这只是修改注册表。现有的进程不会使用这些值。如果一个新进程在此更改之后启动,并且不从其父进程继承旧环境,那么它将这样做。

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


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

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

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

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

注:

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


我会用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确认目录确实存在。


您不需要任何set或setx命令。只需打开终端,输入:

PATH

这显示了PATH变量的当前值。现在要添加目录吗?简单的类型:

PATH %PATH%;C:\xampp\php

如果出于任何原因你想清除PATH变量(完全没有路径或删除其中的所有路径),输入:

PATH ;

更新

就像Danial Wilson在下面的评论中指出的那样,它只在当前会话中设置路径。要永久地设置路径,请使用setx,但要注意,尽管它会永久地设置路径,但不会在当前会话中设置,因此必须启动一个新的命令行才能查看更改。更多信息在这里。

使用ECHO命令检查环境变量是否存在或查看其值:

echo %YOUR_ENV_VARIABLE%

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

mybatchfile

输出:

-- Here all environment variables are available

And:

php file.php

除了这些答案,如果你想要一个很好的GUI工具来编辑你的Windows环境变量,你可以使用快速环境编辑器。

试一试!它使用起来很安全,而且很棒!


如果你已经在你想添加到PATH的目录中,这很方便:

set PATH=%PATH%;%CD%

它适用于标准的Windows cmd,但不适用于PowerShell。

对于PowerShell, %CD%等价于[System.Environment]::CurrentDirectory。


命令行更改将不是永久的,并且将在控制台关闭时丢失。 这条路就像先到先得一样。 您可能希望覆盖其他已经包含的可执行文件。例如,如果您的路径上已经有了另一个版本,而您希望添加不同的版本,而不需要对路径进行永久更改,则应该将目录放在命令的开头。

重写已包含的可执行文件;

设置路径= C: \ xampp \ php; % %路径;


在Windows 10 LTSB上查看上述建议,并浏览一下“帮助”概要(可以在输入'command /?’),让我得出结论,PATH命令只改变当前会话的系统环境变量PATH值,但重新启动后,所有值重置为默认值-就像使用PATH命令之前一样。

另一方面,使用具有管理权限的SETX命令要强大得多。它会永久地改变这些值(或者至少在下次使用此命令或在下一次手动GUI操作这些值之前……).

最适合我的SETX语法用法:

SETX PATH "%PATH%;C:\path\to\where\the\command\resides"

这里应该避免使用等号“=”,不要担心空格!对于包含空格的路径,不需要再插入任何引号——分隔符号';'就可以了。

SETX后面的PATH关键字定义了在系统环境变量可能的值中应该改变哪一组值,而引号内的%PATH%(被百分号包围的单词PATH)告诉操作系统保持现有PATH值不变,并将下面的路径(跟随分隔符号';'的路径)添加到现有值中。


在命令提示符中,您告诉Cmd使用Windows资源管理器的命令行,在它前面加上start。

因此,启动Yourbatchname。

注意,您必须注册,如果它的名称是batchfile.exe。

可以将程序和文档添加到注册表中,因此在“开始-运行”对话框或快捷方式中输入它们的名称而不输入路径,Windows就可以找到它们。

这是一个通用的reg文件。复制下面的行到一个新的文本文档,并将其保存为anyname.reg。用你的程序或文档编辑它。

在路径中,使用\\分隔键路径中的文件夹名称,就像regedit使用单个\分隔键名称一样。所有reg文件都以REGEDIT4开头。分号将一行转换为注释。符号@表示将值赋给键,而不是指定值。

该文件不必存在。这可以用来设置Word.exe打开Winword.exe。

输入start batchfile将启动iexplorer .exe。

REGEDIT4
;The bolded name below is the name of the document or program, <filename>.<file extension>

[HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\App Paths\Batchfile.exe]

; The @ means the path to the file is assigned to the default value for the key.
; The whole path in enclosed in a quotation mark ".

@="\"C:\\Program Files\\Internet Explorer\\iexplore.exe\""

; Optional Parameters. The semicolon means don't process the line. Remove it if you want to put it in the registry

; Informs the shell that the program accepts URLs.

;"useURL"="1"

; Sets the path that a program will use as its' default directory. This is commented out.

;"Path"="C:\\Program Files\\Microsoft Office\\Office\\"

你已经在另一个答案中知道了路径。也参见doskey /?对于CMD宏(它们只在输入时工作)。

您可以在CMD下执行启动命令。来自Windows资源包技术参考

自动运行

HKCU\Software\Microsoft\Command Processor

Data type Range Default value
REG_SZ  list of commands  There is no default value for this entry.

描述

包含每次启动Cmd.exe时执行的命令。


更安全的 SETX

对@Nafscript的初始SETX答案的所有注释点头。

默认情况下SETX将更新您的用户路径。 对于SETX……/M将更新您的系统路径。 %PATH%包含附加用户路径的系统路径

警告

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

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

用户变量: HKCU \环境 系统变量: HKLM \ SYSTEM \ CurrentControlSet \ \会话管理器\环境控制

使用说明

附加到用户路径

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

附加到系统路径

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

(除了Key和SETX /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

选择

最后,ss64 SETX页面推荐了一个名为SETENV的改进版本,它将设置用户或系统环境变量分开。


例子

下面是在Windows 7上设置PATH环境变量的完整示例。该示例在尝试更改值之前检测软件是否已经添加到PATH。与上面给出的例子有一些小的技术差异:

@echo off
set OWNPATH=%~dp0
set PLATFORM=mswin

if defined ProgramFiles(x86)                        set PLATFORM=win64
if "%PROCESSOR_ARCHITECTURE%"=="AMD64"              set PLATFORM=win64
if exist "%OWNPATH%tex\texmf-mswin\bin\context.exe" set PLATFORM=mswin
if exist "%OWNPATH%tex\texmf-win64\bin\context.exe" set PLATFORM=win64

rem Check if the PATH was updated previously
echo %PATH% | findstr "texmf-%PLATFORM%" > nul

rem Only update the PATH if not previously updated
if ERRORLEVEL 1 (
  set Key="HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment"
  for /F "USEBACKQ tokens=2*" %%A in (`reg query %%Key%% /v PATH`) do (
    if not "%%~B" == "" (
      rem Preserve the existing PATH
      echo %%B > currpath.txt

      rem Update the current session
      set PATH=%PATH%;%OWNPATH%tex\texmf-%PLATFORM%\bin
      
      rem Persist the PATH environment variable
      setx PATH "%%B;%OWNPATH%tex\texmf-%PLATFORM%\bin" /M
    )
  )
)

1. 并不完全正确


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

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


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


这次我已经安装了PHP。我提取php-7***.zip到C:\php</ I > 备份我当前的PATH环境变量:运行cmd,执行命令:PATH >C:\ PATH -backup.txt 获取当前路径值到C:\path.txt文件(同样的方法) 修改path.txt(当然,我的路径长度超过1024个字符,Windows运行了几年)

我已经在那里删除了重复的路径,比如'C:\Windows;或C:\Windows\ System32系统;或C:\Windows\System32\ Wbem;-我有两次。 也可以删除已卸载的程序路径。例如:C:\Program Files\ NonExistSoftware; 这样,我的路径字符串长度< 1024:)))) 在路径字符串的末尾,添加;C:\php\ 复制路径值只到缓冲区与框架双引号!示例:"C:\Windows;****;C:\php"不应该有PATH= !!

以管理员身份打开Windows PowerShell(例如Win + X)。 运行命令: 这里你应该插入字符串从缓冲区(新的路径值)" 重新运行您的终端(我使用“Far Manager”)并检查: php - v


使用gtools中的path。

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

pathed /REMOVE "c:\my\folder"
pathed /APPEND "c:\my\folder"

它显示结果,而不需要衍生一个新的cmd!


当遇到这个问题时,我不得不重新启动Windows。

我运行的是Windows 7 x64。我手动更新了系统PATH变量。如果我从统计菜单中运行cmd.exe,这可以正常工作。但如果我在Windows资源管理器地址栏中输入“cmd”,它似乎从其他地方加载PATH,而这并没有我的手动更改。

(为了避免怀疑-是的,在重新启动之前,我确实关闭并重新运行了几次cmd,但它没有帮助。)


在Windows 10上,我能够搜索set path环境变量,并得到这些指令:

From the desktop, right-click the very bottom-left corner of the screen to get the Power User Task Menu. From the Power User Task Menu, click System. In the Settings window, scroll down to the Related settings section and click the System info link. In the System window, click the Advanced system settings link in the left navigation panel. In the System Properties window, click the Advanced tab, then click the Environment Variables button near the bottom of that tab. In the Environment Variables window (pictured below), highlight the Path variable in the System variables section and click the Edit button. Add or modify the path lines with the paths you want the computer to access. Each different directory is separated with a semicolon, as shown below:

C:\程序文件;C:\Winnt;C:\Winnt\System32

我第一次搜索它时,它立即弹出了系统属性窗口。之后,我找到了上面的说明。


下面的解决方案非常有效。

在你的Windows终端上试试下面的命令。

setx PATH "C:\myfolder;%PATH%"

SUCCESS:保存了指定的值。

你可以参考更多在这里。


在Windows上的Bash shell中使用这些命令将一个新位置附加到PATH变量

PATH=$PATH:/path/to/mydir

或者在这个位置前面加上前缀

PATH=/path/to/mydir:$PATH

例如,在你的情况下,做

PATH=$PATH:C:\xampp\php

您可以回显$PATH以查看shell中的PATH变量。


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

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

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

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

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

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

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

Windows 10

通过

Windows 7

通过

Windows XP

通过