我试图在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变量添加目录?


当前回答

这次我已经安装了PHP。我提取php-7***.zip到C:\php</ I > 备份我当前的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(例如Win + X)。 运行命令: 这里你应该插入字符串从缓冲区(新的路径值)" 重新运行您的终端(我使用“Far Manager”)并检查: php - v

其他回答

选项1

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

这是可行的,因为只有在更改之后启动的程序才能看到新的PATH。

选项2

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

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

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

分解一下:

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

如何从cmd.exe/Run…打开环境变量窗口对话框

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

Windows中的环境变量工具可以直接启动吗?关于服务器故障。

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

右键点击“这台电脑” 点击“属性” 在弹出窗口的左侧面板上,点击“高级系统设置” 点击“高级”选项卡 点击窗口底部的“环境变量”按钮

您也可以在开始菜单搜索中搜索变量。

参考环境变量窗口的图片:

Windows 10

通过

Windows 7

通过

Windows XP

通过

在Windows 10上,我能够搜索set path环境变量,并得到这些指令:

From the desktop, right-click the very bottom-left corner of the screen to get the Power User Task Menu. From the Power User Task Menu, click System. In the Settings window, scroll down to the Related settings section and click the System info link. In the System window, click the Advanced system settings link in the left navigation panel. In the System Properties window, click the Advanced tab, then click the Environment Variables button near the bottom of that tab. In the Environment Variables window (pictured below), highlight the Path variable in the System variables section and click the Edit button. Add or modify the path lines with the paths you want the computer to access. Each different directory is separated with a semicolon, as shown below:

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

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

更安全的 SETX

对@Nafscript的初始SETX答案的所有注释点头。

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

警告

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

ss64 SETX页面有一些非常好的例子。重要的是,它指向了SETX vs SETX /M的注册表项的位置

用户变量: HKCU \环境 系统变量: HKLM \ SYSTEM \ CurrentControlSet \ \会话管理器\环境控制

使用说明

附加到用户路径

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. 并不完全正确

使用gtools中的path。

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

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

它显示结果,而不需要衍生一个新的cmd!