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

我试图在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

我有两个问题:

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

选项1

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

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

选项2

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

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

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

分解一下:

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

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

您没有指定如何启动控制台会话。确保这一点的最佳方法是退出命令shell并再次运行它。然后它应该继承更新后的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来确认目录确实存在。

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

PATH

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

PATH %PATH%;C:\xampp\php

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

PATH ;

更新

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

要检查环境变量是否存在或查看其值,使用回声命令:

echo %YOUR_ENV_VARIABLE%

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

c:\>mybatchfile
-- here all env. are available
c:\>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 /?”'在cmd上),把我带到了 结论:PATH命令只改变当前会话的系统环境变量PATH值,但是在重新启动后,所有的值都重置为默认值-就像使用PATH命令之前一样

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

最适合我的SETX语法用法:

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

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

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

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

所以# EYZ0。

请注意,您必须注册它的名称是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

向EYZ1上的所有评论点头。

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

警告

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

ss64 SETX界面就有一些很好的例子。重要的是,它指向了SETXSETX /M的注册表键的位置

用户变量:

# EYZ0

系统变量:

# EYZ0

使用说明

附加到用户PATH

# EYZ0

@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

# EYZ0。# EYZ1

(它基本上是相同的,除了不同的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

选择

最后,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 7Windows 8Windows 10

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

  1. 这次我已经安装了PHP。提取php-7 * * * . zipC: \ php \
  2. 备份我当前的PATH环境变量:执行cmd,然后执行命令:path >C:\path-backup.txt

  3. 获取当前路径值到C:\path.txt文件(同样的方法)

  4. 修改path.txt(当然,我的路径长度超过1024个字符,windows运行几年)
    • 我已经删除了重复的路径,如“C: \ Windows;C:\Windows\ System32系统;C:\Windows\System32\ Wbem; -我有两次。
    • 也可以删除已卸载的程序路径。例如:# EYZ0
    • 这样,我的路径字符串长度<1024:)))
    • C:\php\
    • 复制仅限路径值到缓冲区与框架双引号!示例:“C:\Windows;****;C:\php\”不应该有路径= !!
    • 李< / ul > < / >
    • 以管理员身份打开Windows PowerShell。
    • 运行命令:

# EYZ0

  1. 重新运行您的终端(我使用“远管理器”)并检查: 李# EYZ0 < / >

gtools使用路径

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

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

它显示结果不需要生成一个新的CMD!

尽管它可能很琐碎,但当遇到这个问题时,我不得不重新启动Windows

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

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

在Windows 10上,我可以搜索设置路径环境变量并得到这些指令:

  1. 在桌面上,右键单击屏幕的左下角,以获得Power User Task菜单。
  2. 在“高级用户任务”菜单中,单击“系统”。
  3. 在“设置”窗口中,向下滚动到“相关设置”部分,然后单击“系统信息链接”。
  4. 在“系统”窗口中,单击左侧导航面板中的“高级系统设置”链接。
  5. 在“系统属性”窗口中,单击“高级”选项卡,然后单击该选项卡底部附近的“环境变量”按钮。
  6. 在“环境变量”窗口(如下图所示)中,突出显示“系统变量”部分中的Path变量,并单击“编辑”按钮。使用希望计算机访问的路径添加或修改路径行。每个目录之间用分号分隔,如下图所示:

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

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

下面的解决方案工作得很好

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

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中打开环境变量窗口对话框

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

通过serverfault.com上的windows中的环境变量工具可以直接启动吗?

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

  1. 右键点击“This PC"
  2. 点击“Properties"
  3. 在弹出窗口的左侧面板上,点击“高级系统设置”。
  4. 点击“高级”;选项卡
  5. 点击“环境变量”;按钮在窗口底部

你也可以在开始菜单搜索中搜索Variables

参考图片如何环境变量窗口看起来像:

Windows 10

 Windows 10上的环境变量窗口 # EYZ0 < / em >

Windows 7

 Windows 7上的环境变量窗口 # EYZ0 < / em >

Windows XP

 Windows上的环境变量窗口 # EYZ0 < / em >