我正在尝试将C:\xampp\php添加到Windows中的系统PATH环境变量中。
我已经使用"环境变量"对话框添加了它。
但当我输入控制台时:
C:\>path
它不显示新的C:\xampp\php目录:
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变量添加目录?
这是一个话题,因为这是一个关于"程序员常用的工具"的问题。如果您是在Windows上开发的,并且您从未需要修改路径,我会感到惊讶。为了满足与编程相关的需求,我强调了投票最高的答案所指出的:您可以通过控制台(或通过批处理文件)以编程的方式进行此操作。
感谢大家对@georgestocker的评论,是的,我是以编程的方式完成的,但是我还没有想到在控制台会话中应用更改后需要重新登录。(我认为只有在我的情况下)但是投票最高的回答通常能回答这个问题。
@乔治同意了,但事实上,这个问题是为超级用户编写的,而不是堆栈溢出。超级用户将提供有关个人使用的Web服务器配置的帮助。堆栈溢出用于编程问题。
退出并打开新控制台…如果您使用的是bash,则可能需要重新启动系统才能保持更改,这取决于您使用的方式/内容。
选项1
使用GUI更改PATH后,关闭并重新打开控制台窗口。
这是因为只有在更改后启动的程序才会看到新的PATH。选项2
在打开的命令窗口中执行此命令:
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。
@Ilya:我的意思是在mycomputer->properties->advanced->env variables->path中更改路径后,您可以打开控制台窗口。一些Windows应用程序将在启动后传播环境变量更改,而有些则不会。winxp cmd.exe没有。
如果我退出控制台并重新运行,我必须重置路径。你知道如何使这一变化成为永久性的吗?
@如果您遵循"我的电脑"、"属性"、"高级"、"环境变量"、"路径",请使用david tainthewong。并将目录添加到该字符串的末尾,它将保持不变。更改后一定要打开控制台。
是的@theb3rv,做一些简单的事情是很长的路。奇怪的是,控制台中没有可以键入的持久命令
@david tain2331;wong刚刚发现"setx是一种进行持久性更改的方法,比如对话框。"所以setx命令应该这样做。
这不是持久的。一旦关闭控制台窗口,更改将丢失。
@我想要么我不够清楚要么你没看到答案的前半部分。
如果路径已经存在怎么办?最好检查一下是否存在
您的答案似乎只对会话有效,只要我退出并打开一个新的命令提示,路径就会保持在开始时的状态。
"更改系统路径后打开控制台窗口"…这真的有帮助。谢谢您
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的路径:
setx /M path"%path%;C:\your\path\here"
如果要设置用户PATH,而不是系统PATH,请删除/M标志。
笔记:
setx命令仅在Windows7及更高版本中可用。
您应该从提升的命令提示符运行这个命令。
如果只想为当前会话更改它,请使用set。
SETX /M path"%path%;C:\Program Files (x86)\Git\bin"设置机器级的路径值
为什么这不是公认的答案?我想大多数人都想永久地走自己的路…
@接受的回答也是永久性的。唯一一个不是的是使用SET的疯狂上票。
另请参见使用setx克服1024字符限制
警告:由于使用了%PATH%变量,此命令将全局env变量与用户变量合并。不是吗?这可能会产生不必要的副作用,尤其是使用/m开关时。
警告2:%PATH%变量可能与环境变量不同步,因为它在启动命令提示符时加载,以后再也不会重新加载(即使在执行setx命令时)。此外,它还可能被以前执行的脚本在本地更改。
不适合我。至少在使用"set"而不是"setx"时。我需要在变量名和值之间添加一个=即set path=…"
@过度优化,这是因为混淆的SET和SETX有相似但不同的语法。SET PATH=...对SETX PATH ...的比较
再次警告:由于此方法合并/截断数据,请确保首先备份您的%path%变量值。我知道,这似乎很明显,但我不习惯这种破坏性的和永久性的行为,因为我们的日子里只有这么一点指挥权(特别是自从我多年来一直在玩弄道路以来)。当它把我的道路弄乱的时候,我想能够恢复它,并且…我不是:)这个答案应该得到一个更明确的警告,即这个方法将同时成为add data、truncate data和non-reversible。
最后,我可以在Windows中获得真正的Linux体验。让我想起devrant.com/rants/618148/rant
这只修改注册表。现有进程不会使用这些值。如果新进程在此更改之后启动,并且不从其父级继承旧环境,则新进程将执行此操作。
您没有指定如何启动控制台会话。确保这一点的最佳方法是退出命令shell并再次运行它。然后它应该继承更新的路径。
嗯,不,它实际上只修改注册表。在控制面板对话框中这样做应该有点明显,而不是用path命令来提示命令。如果您关心的话,您可以通过SysInternals的流程监视器轻松观察它的工作。使用路径不同,当控制台关闭时,您所做的任何更改都将丢失。setx是一种进行持久性更改的方法,如对话框。
这是正确的。在控制台会话接收新的环境变量之前,您总是需要重新启动它。
如果从应用程序发送WM_SETTINGCHANGE消息,控制台会话会更新变量吗?stackoverflow.com/a/8358361
理论上是可能的,我所知道的任何实际的CRT实现都不能做到这一点。资源管理器。
背景信息证实了这一点:blogs.msdn.microsoft.com/oldnewthing/20150915-00/?P=91591
是的,当我需要一个环境变量同时保存在Windows注册表中并可在活动会话中立即使用时,它会实现,而且我已经实现了这一功能几次。
您不需要任何set或setx命令,只需打开终端并键入:
PATH
这将显示路径变量的当前值。现在要向其中添加目录吗?简单类型:
PATH %PATH%;C:\xampp\php
如果出于任何原因要清除路径变量(完全没有路径或删除其中的所有路径),请键入:
PATH ;
更新
就像下面评论中提到的DanialWilson,它只在当前会话中设置路径。要永久设置路径,请使用setx,但请注意,虽然这会永久设置路径,但不会在当前会话中设置,因此您必须启动新的命令行来查看更改,更多信息请参见此处。
要检查环境变量是否存在或查看其值,请使用echo commnad:
echo %YOUR_ENV_VARIABLE%
它起作用了:)那怎么样!路径%path%;'我记得
我认为这只适用于命令会话的实例,使用setx永久更改它。
不要在这里加引号。例如,调用PATH %PATH%;C:\Program Files\...,而不是PATH"%PATH%;C:\Program Files\..."
它奏效了。谢谢
不要使用SETX!您有截断路径变量的风险,会丢失您花费时间设置的许多其他路径。注意上面的警告。
@史威尔逊,看你的评论太晚了!
在这个PowerShell的时代,我会这样编辑路径:
$PATH = [Environment]::GetEnvironmentVariable("PATH")
$xampp_path ="C:\xampp\php"
[Environment]::SetEnvironmentVariable("PATH","$PATH;$xampp_path")
要为所有用户(机器范围)设置变量,最后一行应如下所示:
[Environment]::SetEnvironmentVariable("PATH","$PATH;$xampp_path","Machine")
在PowerShell脚本中,您可能希望在添加到路径之前检查是否存在C:\xampp\php(以防以前添加了该脚本)。你可以用if条件包装它。
所以把它们放在一起:
$PATH = [Environment]::GetEnvironmentVariable("PATH")
$xampp_path ="C:\xampp\php"
if( $PATH -notlike"*"+$xampp_path+"*" ){
[Environment]::SetEnvironmentVariable("PATH","$PATH;$xampp_path","Machine")
}
使用Machine参数调用SetEnvironmentVariable时,需要打开具有管理员权限的PowerShell
令人失望的是,这个"强大"的shell无法识别%userprofile%和$userprofile.。但是,这又是我们要说的窗户
不过,这应该是正确的答案
@艾伯德,你要找的是埃多克斯1〔5〕。
您还应该在GetEnvironmentVariable的调用中指定user或Machine。否则,$PATH将包含注册表的用户和机器部分的值,当再次存储路径变量时,这些值将不必要地放大路径变量。
安全SETX
对@nafscript最初的SETX答案的所有评论表示赞同。
默认情况下,SETX将更新您的用户路径。
SETX ... /M将更新您的系统路径。
%PATH%包含附加用户路径的系统路径
警告
备份你的PATH-SETX将截短你超过1024个字符的垃圾邮件。
不要调用SETX %PATH%;xxx—将系统路径添加到用户路径中
不要调用SETX %PATH%;xxx /M—将用户路径添加到系统路径中
过度使用批处理文件会导致盲目性1
ss64 setx页面有一些很好的例子。重要的是,它指出了注册表项对于SETX和SETX /M的位置。
User Variables:
HKCU\Environment
System Variables:
HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment
使用说明追加到用户EDOCX1[9]
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
追加到系统PATH。
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
选择
最后,还有一个名为setenv的改进版本,由ss64 setx页面推荐,该页面可以分割设置用户或系统环境变量。
1。不完全正确
参加聚会迟到了——但如果您已经在要添加到路径的目录中,那么很方便。
set PATH=%PATH%;%CD%
编辑:根据注释-与标准Windows命令一起使用,但不在PowerShell中使用。
对于PowerShell,%CD%等价物是[System.Environment]::CurrentDirectory。
我的PowerShell说无法识别%cd%。
但在cmd.exe中是正常的。
@Paulomatos可以尝试使用[System.Environment]::CurrentDirectory
如果使用setx错误地输入路径怎么办?最好的方法就是通过Windows U.I.控制面板->所有控制面板项->系统->高级系统设置->环境变量
向下滚动到路径并选择编辑。您还可以将其复制并粘贴到您最喜欢的编辑器中,这样您就可以看到整个路径并更容易地对其进行编辑。
这正是OP所做的。(……所以我通过"我的电脑">"属性">"高级">"环境变量">"路径"…)添加了这个目录,然后他问为什么它没有出现在他的命令提示符中。
除了所有的答案,如果您想要一个好的GUI工具来编辑您的Windows环境变量,您可以使用快速环境编辑器。
试试看!使用安全,很棒!
网址:http://www.rapidee.com/en/
Windows10已经显著改进了路径环境变量编辑器。他们只花了20年的时间就找到了答案。
命令行更改不会是永久性的,在控制台关闭时会丢失。
这条路就像先到先得。
您可能希望重写其他已包含的可执行文件。例如,如果您的路径上已经有另一个版本,并且您希望添加不同的版本而不对路径进行永久更改,那么应该将目录放在命令的开头。
重写已包含的可执行文件;
set PATH=C:\xampp\php;%PATH%;
关于第2点,我使用的是一个简单的批处理文件,它为我填充PATH或其他环境变量。因此,默认环境变量没有污染。从任何地方都可以访问此批处理文件,因此我可以键入:
c:\>mybatchfile
-- here all env. are available
c:\>php file.php
这是*nix es和windows之间的一个重要区别。批处理在同一个shell中运行,环境的更改将在它退出后保留(在会话范围内)。但是,这两种方式都可以:批处理文件可以消除您的环境。(顺便说一句,不信,你只需要把这样的文件交给source,比如. mybatchfile)。
您好,@grzegorz gajos,我正在寻找确切的信息,您的链接获得更多详细信息,给出404。有其他选择吗?
抱歉,链接中的内容不再可用。我搬走了。
在Windows 10 LTSB上检查上述建议,并查看"帮助"大纲(键入"command/?"时可以查看)。把我带到结论:path命令仅为当前会话更改系统环境变量path值,但在重新启动之后,所有值都将重置为默认值-就像在使用path命令之前一样。
另一方面,使用具有管理权限的setx命令更为强大,它可以永久地更改这些值(或者至少在下次使用此命令之前或在下次手动操作这些值之前…).
但是为了清晰起见,我认为在这里共享最好的setx语法用法对我有用的可能有一天会对某人有所帮助:
SETX PATH"%PATH%;C:\path\to\where\the\command
esides"
任何等号"="都应该避免,你不必担心空间!不需要再为路径插入任何引号其中包含空格-拆分符号";"执行该操作。
setx后面的path关键字定义了哪些值应该在系统环境变量的可能值之间进行更改,以及引号内的%path%(单词path由百分号包围)告诉操作系统保留现有的路径值,并添加以下路径(拆分后的路径)在现有值上签名";"。
高温高压
使用GTools中的路径
它以直观的方式做事情,例如:
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。
REGEDIT4
;The bolded name below is the name of the document or program, .
[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资源工具包技术参考
自动运行
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