我想把C:\xampp\php
添加到我的系统PATH
环境变量中,在Windows中。
我已经用环境变量对话框添加了它。
但当我在控制台中输入
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
变量中(以及用批处理文件进行编程)?
在你用GUI修改PATH
后,关闭并重新打开控制台窗口。
这样做的原因是只有在修改后启动的程序才能看到新的`PATH'。
在你所打开的命令窗口中执行这个命令。
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'。警告:这个解决方案可能会对你的PATH和你的系统的稳定性产生破坏性。作为一个副作用,它将合并你的用户和系统PATH,并将PATH截断到1024个字符。这个命令的效果是不可逆的。请先对PATH做一个备份。更多信息请参见注释。
不要盲目地复制和粘贴这个。要谨慎使用。
你可以用setx
命令永久地一个路径到PATH
。
setx /M path "%path%;C:\your\path\here\"
如果你想设置用户的PATH'而不是系统的
PATH',请删除`M'标志。
注释。
setx
命令只在Windows 7和更高版本中可用。
你应该在高位的命令提示符下运行这个命令。
如果你只想在当前会话中改变它,使用set。
这只是修改了注册表。 一个现有的进程不会使用这些值。如果一个新的进程是在这一修改之后启动的,并且没有从其父辈那里继承旧的环境,那么它就会使用这些值。
你没有说明你是如何启动控制台会话的。 确保这一点的最好方法是退出命令外壳并再次运行它。然后它应该会继承更新的PATH。
你不需要任何 "set "或 "setx "命令,只需打开终端并输入。
PATH
这就显示了PATH变量的当前值。现在你想把目录添加到其中吗?只需键入。
PATH %PATH%;C:\xampp\php
如果出于任何原因,您想清除PATH变量(完全没有路径或删除其中的所有路径),请输入。
PATH ;
更新
就像Danial Wilson在下面的评论中指出的,它只在当前会话中设置路径。要永久设置路径,请使用setx
,但要注意,虽然它永久设置了路径,但不是在当前会话中,所以你必须启动一个新的命令行才能看到变化,更多信息这里。
要检查环境变量是否存在或查看其值,请使用ECHO commnad。
echo %YOUR_ENV_VARIABLE%
我会用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")
。
[Environment]::SetEnvironmentVariable("PATH", "$PATH;$xampp_path", "Machine")
在PowerShell脚本中,你可能想在添加到PATH之前检查你的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")
}
更好的是,可以创建一个通用函数。 只要提供你想添加的目录即可。
function AddTo-Path{
param(
[string]$Dir
)
if( !(Test-Path $Dir) ){
Write-warning "Supplied directory was not found!"
return
}
$PATH = [Environment]::GetEnvironmentVariable("PATH")
if( $PATH -notlike "*"+$Dir+"*" ){
[Environment]::SetEnvironmentVariable("PATH", "$PATH;$Dir", "Machine")
}
}
你可以通过做一些打磨来让事情变得更好。
例如,使用Test-Path
来确认你的目录是否真的存在。
对@Nafscript最初的SETX
答案的所有评论点个头。
SETX
默认会更新你的用户路径。SETX ... /M
将更新你的系统路径。%PATH%
包含系统路径和用户路径。PATH
- SETX
将截断超过1024个字符的垃圾。SETX %PATH%;xxx
- 将系统路径添加到用户路径中。SETX %PATH%;xxx /M
- 将用户路径添加到系统路径中。ss64 SETX页面]1有一些非常好的例子。重要的是它指出了 "SETX "与 "SETX /M "的注册表键的位置。
用户变量。
HKCU\Environment
。
系统变量。
HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment
。
PATH
中`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
. 必须以管理员身份运行。
(除了不同的 "键 "和 "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. 不是严格意义上的。
除了所有的答案之外,如果你想要一个漂亮的GUI工具来编辑你的windows环境变量,你可以使用[快速环境编辑器][1] 。
试试吧! 它的安全使用和真棒!
在Windows 10 LTSB上查看上述建议,并在"帮助" 概要(在cmd上输入'命令/?'时可以查看),让我找到了"帮助"。 cmd上),让我找到了。 结论是,PATH命令只改变了当前会话的系统环境变量Path值,但在重启后,所有的值都会被重置为默认值,就像使用PATH命令之前一样。
另一方面,使用具有管理权限的SETX命令更加强大,它可以永久地改变这些值(或者至少在下一次使用这个命令之前,或者在下一次手动操作这些值之前......)。 ).
但是为了清楚起见,我想在这里分享一下最好的SETX语法用法 对我有用的东西,也许有一天会对别人有所帮助。
SETX PATH "%PATH%;C:\path\to\where\the\command\resides"
其中任何等号'='。 应该避免,而且你不要担心。 空格! 路径中不需要再加引号。 内含空格的--分割符号';'。 来完成这项工作。
SETX后面的PATH关键字定义了在系统环境变量可能的值中应该改变哪一组值,而引号内的%PATH%(PATH这个词,周围有百分号),则告诉操作系统保持现有的PATH值不变,并将下面的路径(分割符号后面的那个';'。 )添加到现有的值上。
HTH
在命令提示符中,你用start
作为前缀,告诉Cmd使用资源管理器的命令行。
所以start Yourbatchname
。
注意你要把它的名字注册成batchfile.exe
。
程序和文件可以被添加到注册表中,所以在 "开始-运行 "对话框或快捷方式中键入它们的名称而不是它们的路径,可以让Windows找到它们。
这是一个通用的注册表文件。 将下面的行复制到一个新的文本文档中,并将其保存为anyname.reg。 用你的程序或文档来编辑它。
在路径中使用\来分隔关键路径中的文件夹名,就像regedit使用单个\来分隔它的键名一样。 所有的reg文件都以regedit4开头。 分号将一行变成注释。 @符号的意思是将值分配给键,而不是一个命名的值。
该文件不一定要存在。 这可以用来设置Word.exe打开Winword.exe。
输入start batchfile
将启动iexplore.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时执行的命令。
一个更好的替代控制面板的方法是使用这个来自sourceforge的免费程序,叫做Pathenator。
https://sourceforge.net/projects/pathenator/
然而,它只适用于Dot.Net 4.0或更高版本的系统,如windows 7、8或10。
那次我已经安装了PHP。将php-7***.zip解压到C:\php\中。
备份我当前的PATH环境变量:运行cmd
,并执行命令。path >C:\path-backup.txt
。
把我当前的路径值输入C:\path.txt文件(同样的方法
修改path.txt(当然,我的路径长度超过1024个字符,windows运行了好几年了
setx path "这里你应该从缓冲区插入字符串(新的路径值)"
。
php -v
。