关于命令行:在Windows中将目录添加到PATH环境变量

Adding directory to PATH Environment Variable in Windows

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

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

但当我输入控制台时:

1
C:\>path

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

1
2
3
4
5
6
7
8
PATH=D:\Program Files\Autodesk\Maya2008\bin;C:
uby192\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

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

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

    此命令将C:\your\path\here\附加到当前的PATH上。

    分解:

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


    WARNING: This solution may be destructive to your PATH, and the stability of your system. As a side effect, it will merge your user and system PATH, and truncate PATH to 1024 characters. The effect of this command is irreversible. Make a backup of PATH first. See the comments for more information.

    Don't blindly copy-and-paste this. Use with caution.

    您可以使用setx命令永久添加到PATH的路径:

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

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

    笔记:

    • setx命令仅在Windows7及更高版本中可用。
    • 您应该从提升的命令提示符运行这个命令。

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


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

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


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

    1
    PATH

    这将显示路径变量的当前值。现在要向其中添加目录吗?简单类型:

    1
    PATH %PATH%;C:\xampp\php

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

    1
    PATH ;

    更新

    就像下面评论中提到的DanialWilson,它只在当前会话中设置路径。要永久设置路径,请使用setx,但请注意,虽然这会永久设置路径,但不会在当前会话中设置,因此您必须启动新的命令行来查看更改,更多信息请参见此处。

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

    1
    echo %YOUR_ENV_VARIABLE%


    在这个PowerShell的时代,我会这样编辑路径:

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

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

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

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

    所以把它们放在一起:

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


    安全SETX

    对@nafscript最初的SETX答案的所有评论表示赞同。

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

    警告

  • 备份你的PATH-SETX将截短你超过1024个字符的垃圾邮件。
  • 不要调用SETX %PATH%;xxx—将系统路径添加到用户路径中
  • 不要调用SETX %PATH%;xxx /M—将用户路径添加到系统路径中
  • 过度使用批处理文件会导致盲目性1
  • ss64 setx页面有一些很好的例子。重要的是,它指出了注册表项对于SETXSETX /M的位置。

    User Variables:

    HKCU\Environment

    System Variables:

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

    使用说明追加到用户EDOCX1[9]

    append_user_path.cmd

    1
    2
    3
    4
    5
    6
    @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

    追加到系统PATH

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

    (基本上相同,除了不同的KeySETX /M修饰语)

    1
    2
    3
    4
    5
    6
    @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

    选择

    最后,还有一个名为setenv的改进版本,由ss64 setx页面推荐,该页面可以分割设置用户或系统环境变量。

    1。不完全正确


    参加聚会迟到了——但如果您已经在要添加到路径的目录中,那么很方便。

    set PATH=%PATH%;%CD%

    编辑:根据注释-与标准Windows命令一起使用,但不在PowerShell中使用。

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


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

    向下滚动到路径并选择编辑。您还可以将其复制并粘贴到您最喜欢的编辑器中,这样您就可以看到整个路径并更容易地对其进行编辑。


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

    试试看!使用安全,很棒!

    网址:http://www.rapidee.com/en/


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

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

    set PATH=C:\xampp\php;%PATH%;


    关于第2点,我使用的是一个简单的批处理文件,它为我填充PATH或其他环境变量。因此,默认环境变量没有污染。从任何地方都可以访问此批处理文件,因此我可以键入:

    1
    2
    3
    c:\>mybatchfile
    -- here all env. are available
    c:\>php file.php


    在Windows 10 LTSB上检查上述建议,并查看"帮助"大纲(键入"command/?"时可以查看)。把我带到结论:path命令仅为当前会话更改系统环境变量path值,但在重新启动之后,所有值都将重置为默认值-就像在使用path命令之前一样。

    另一方面,使用具有管理权限的setx命令更为强大,它可以永久地更改这些值(或者至少在下次使用此命令之前或在下次手动操作这些值之前…).

    但是为了清晰起见,我认为在这里共享最好的setx语法用法对我有用的可能有一天会对某人有所帮助:

    1
    2
    SETX PATH"%PATH%;C:\path\to\where\the\command
    esides"

    任何等号"="都应该避免,你不必担心空间!不需要再为路径插入任何引号其中包含空格-拆分符号";"执行该操作。

    setx后面的path关键字定义了哪些值应该在系统环境变量的可能值之间进行更改,以及引号内的%path%(单词path由百分号包围)告诉操作系统保留现有的路径值,并添加以下路径(拆分后的路径)在现有值上签名";"。

    高温高压


    使用GTools中的路径

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

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

    它并显示结果,而无需生成新的命令!


    在命令提示中,通过在命令行前面加上start,告诉命令行使用explorer的命令行。

    因此,start Yourbatchname

    请注意,您必须注册,就好像它的名称是batchfile.exe

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

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

    在路径中,使用分隔关键路径中的文件夹名称,因为regedit使用单个分隔其关键名称。所有注册表文件都以regedit4开头。分号将一行转换为注释。@符号表示将值分配给键,而不是指定的值。

    文件不必存在。这可用于将word.exe设置为打开winword.exe。

    键入start batchfile将启动iexplore.exe。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    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宏(它们只在键入时工作)。

    您可以为命令运行启动命令。来自Windows资源工具包技术参考

    自动运行

    1
    2
    3
    4
    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时执行的命令。


    控制面板的一个更好的选择是使用这个来自sourceforge的免费软件程序,叫做pathenator:

    https://sourceforge.net/projects/pathenator/

    但是,它只为具有.NET 4.0或更高版本(如Windows 7、8或10)的系统工作。


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


  • 那次我安装了PHP。已将php-7***.zip提取到c:php中
  • 备份当前路径环境变量:运行cmd,执行命令:path >C:\path-backup.txt

  • 将当前路径值获取到c:path.txt文件中(相同方式)

  • modify path.txt(当然,我的路径长度超过1024个字符,Windows运行几年)
    • 我删除了其中的重复路径,如"c:windows;或c:windowssystem32;或c:windowssystem32wbem;—我有两次。
    • 同时删除未安装的程序路径。示例:c:program filesonexists software;
    • 这样,我的路径字符串长度<1024:)
    • 在路径字符串末尾添加;c:php
    • 仅将路径值复制到带框双引号的缓冲区中!示例:"c:windows;****;c:php"不应该有路径=!!!
  • 以管理员身份打开Windows PowerShell。
  • 运行命令:
  • setx path"Here you should insert string from buffer (new path value)"

  • 重新运行终端(我使用"far manager")并检查:php -v