我正在尝试在 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\
附加到当前 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。
SETX /M path "%path%;C:\Program Files (x86)\Git\bin\"
在机器级别设置 PATH 值
%PATH%
变量,此命令将全局环境变量与用户变量合并。不是吗?这可能会产生不必要的副作用,尤其是使用 /M 开关
%PATH%
变量可能与环境变量不同步,因为它是在命令提示符启动时加载的,之后再也不会重新加载(即使在执行 setx 命令时)。它也可能已被先前执行的脚本在本地更改。
这只会修改注册表。现有流程不会使用这些值。如果新进程在此更改之后启动并且不从其父进程继承旧环境,它将这样做。
您没有指定如何启动控制台会话。确保这一点的最佳方法是退出命令 shell 并再次运行它。然后它应该继承更新的 PATH 环境变量。
WM_SETTINGCHANGE
消息,控制台会话会更新变量吗? stackoverflow.com/a/8358361
您不需要任何 set
或 setx
命令。只需打开终端并输入:
PATH
这显示了 PATH 变量的当前值。现在你想给它添加目录吗?只需键入:
PATH %PATH%;C:\xampp\php
如果出于任何原因要清除 PATH 变量(根本没有路径或删除其中的所有路径),请键入:
PATH ;
更新
就像 Danial Wilson 在下面的评论中指出的那样,它仅在当前会话中设置路径。要永久设置路径,请使用 setx
,但请注意,虽然这会永久设置路径,但 不是 在当前会话中,因此您必须启动新的命令行才能看到更改。更多信息是 here。
要检查环境变量是否存在或查看其值,请使用 ECHO 命令:
echo %YOUR_ENV_VARIABLE%
PATH %PATH%;C:\Program Files\...
而不是 PATH "%PATH%;C:\Program Files\..."
我会改用 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
确认您的目录确实存在。
Machine
参数调用 SetEnvironmentVariable
,您需要以管理员权限打开 PowerShell
$env:userprofile
。
GetEnvironmentVariable
的调用中指定 user
或 machine
。否则,$PATH
将包含注册表的用户和机器部分的值,这将在再次存储路径变量时不必要地破坏路径变量。
更安全的 SETX
对 @Nafscript's initial SETX
answer 上的所有评论表示赞同。
SETX 默认会更新你的用户路径。
SETX ... /M 将更新您的系统路径。
%PATH% 包含附加用户路径的系统路径
警告
备份您的 PATH - SETX 将截断超过 1024 个字符的垃圾不要调用 SETX %PATH%;xxx - 将系统路径添加到用户路径中 不要调用 SETX %PATH%;xxx /M - 将用户路径添加到系统路径 批处理文件使用过多会导致失明1
ss64 SETX page 有一些很好的例子。重要的是,它指出了 SETX
与 SETX /M
的注册表项的位置
用户变量:HKCU\Environment 系统变量:HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment
使用说明
附加到用户路径
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. 不完全正确
如果您已经在要添加到 PATH 的目录中,则非常方便:
set PATH=%PATH%;%CD%
它适用于标准的 Windows cmd,但不适用于 PowerShell。
对于 PowerShell,%CD%
等效项是 [System.Environment]::CurrentDirectory
。
[System.Environment]::CurrentDirectory
除了所有答案之外,如果您想要一个不错的 GUI 工具来编辑您的 Windows 环境变量,您可以使用 Rapid Environment Editor。
试试看!它使用安全,非常棒!
命令行更改不会是永久性的,并且会在控制台关闭时丢失。
该路径的工作方式类似于先到先得。
您可能想要覆盖其他已包含的可执行文件。例如,如果您的路径上已经有另一个版本,并且您想添加不同的版本而不对路径进行永久更改,您应该将目录放在命令的开头。
覆盖已经包含的可执行文件;
设置 PATH=C:\xampp\php;%PATH%;
关于点 2 我正在使用一个简单的批处理文件来填充 PATH
或其他环境变量。因此,默认情况下没有环境变量的污染。这个批处理文件可以从任何地方访问,所以我可以输入:
c:\>mybatchfile
-- here all env. are available
c:\>php file.php
source
这样的文件,例如 . mybatchfile
)。
检查 Windows 10 LTSB 上的上述建议,并瞥见“帮助”大纲(可以在 cmd 上键入“命令/?”时查看),让我得出结论,PATH 命令会更改系统环境变量路径值仅适用于当前会话,但在重新启动后,所有值都会重置为默认值 - 就像使用 PATH 命令之前一样。
另一方面,使用具有管理权限的 SETX 命令更强大。它会永久更改这些值(或至少直到下一次使用此命令或直到下一次手动 GUI 操作这些值......)。
最适合我的 SETX 语法用法:
SETX PATH "%PATH%;C:\path\to\where\the\command\resides"
应避免使用任何等号“=”,而且您不必担心空格!不需要为其中包含空格的路径插入任何引号 - 拆分符号';'做这项工作。
SETX 后面的 PATH 关键字定义了应该在系统环境变量的可能值中更改哪一组值,引号内的 %PATH%(由百分号包围的单词 PATH)告诉操作系统保留现有的PATH 值,并将以下路径(拆分符号“;”之后的路径)添加到现有值。
如果您运行命令 cmd
,它将更新该命令窗口的所有系统变量。
exit
两次,首先关闭新会话,然后关闭第一个会话(使用旧环境)。
在命令提示符中,您告诉 Cmd 使用 Windows Explorer's 命令行,方法是在它前面加上 start
。
所以start Yourbatchname
。
请注意,您必须将其注册为batchfile.exe
。
程序和文档可以添加到注册表中,因此在“开始 - 运行”对话框或快捷方式中键入它们的名称而不输入它们的路径,Windows 就可以找到它们。
这是一个通用的 reg 文件。将下面的行复制到一个新的文本文档并将其保存为 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 的免费软件程序。
但是,它仅适用于具有 .NET 4.0 或更高版本的系统,例如 Windows 7、Windows 8 或 Windows 10。
我当时已经安装了 PHP。将 php-7***.zip 解压到 C:\php\ 备份我当前的 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。运行命令:
setx path "Here you should insert string from buffer (new path value)"
重新运行您的终端(我使用“Far manager”)并检查: php -v
尽管可能微不足道,但在遇到此问题时,我不得不重新启动 Windows。
我正在运行 Windows 7 x64。我对系统 PATH 变量进行了手动更新。如果我从 stat 菜单运行 cmd.exe,这可以正常工作。但是如果我在 Windows 资源管理器地址栏中键入“cmd”,它似乎是从其他地方加载 PATH,这没有我的手动更改。
(为避免疑问 - 是的,在我重新启动之前我确实关闭并重新运行了几次 cmd 并没有帮助。)
在 Windows 10 上,我能够搜索设置路径环境变量并获得以下说明:
在桌面上,右键单击屏幕的最左下角以获取高级用户任务菜单。从高级用户任务菜单中,单击系统。在“设置”窗口中,向下滚动到“相关设置”部分,然后单击“系统信息”链接。在“系统”窗口中,单击左侧导航面板中的“高级系统设置”链接。在“系统属性”窗口中,单击“高级”选项卡,然后单击该选项卡底部附近的“环境变量”按钮。在 Environment Variables 窗口(如下图所示)中,突出显示 System variables 部分中的 Path 变量,然后单击 Edit 按钮。使用您希望计算机访问的路径添加或修改路径行。每个不同的目录用分号隔开,如下图:
C:\Program 文件;C:\Winnt;C:\Winnt\System32
我第一次搜索它时,它立即弹出了系统属性窗口。之后,我找到了上面的说明。
在 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 direct,可能触发 UAC
通过 serverfault.com 上的 Can the environment variables tool in windows be launched directly?。
如何从资源管理器中打开环境变量窗口
右键单击“这台电脑” 单击“属性” 在弹出的窗口左侧面板上,单击“高级系统设置” 单击“高级”选项卡 单击窗口底部的“环境变量”按钮
您也可以在开始菜单搜索中搜索 Variables
。
参考图像“环境变量”窗口的外观:
视窗 10
https://i.stack.imgur.com/7IWua.png
Windows 7的
https://i.stack.imgur.com/hLV0J.png
视窗
https://i.stack.imgur.com/hFL7N.png
不定期副业成功案例分享