Windows 7环境变量在路径中无法使用

44
我正在尝试使用环境变量设置一些路径。 我添加了一个名为"MAVEN_HOME"的环境变量,其值为"C:\maven"。 然后在路径中我添加了"%MAVEN_HOME%\bin;...rest"。 当我输入"echo $MAVEN_HOME%"时,屏幕上会正确打印出"C:\maven"。 但是当我输入"mvn"时,它无法找到在"bin"目录下的批处理文件。
因此,我手动将整个路径添加到PATH中。 "C:\maven\bin;...rest" 然后它就能找到"mvn"并执行了。
请问有人能告诉我我做错了什么吗?

echo %PATH% 输出的是什么? - calebds
5
我也曾遇到同样的问题,发现是路径长度问题。我创建了两个新的环境变量P86和P64,来替换现有PATH变量中所有"C:\Program Files (x86)"和"C:\Program Files"的引用。新路径(系统+用户)在扩展新变量后的长度为2754个字符。我在类似的帖子中读到理论上的极限是32KB,但显然这并不是实际可行的限制。 - hknust
14个回答

76

检查前一个路径和下一个路径之间是否有空格:

错误写法: c:\path1; c:\Maven\bin\; c:\path2\

正确写法: c:\path1;c:\Maven\bin\;c:\path2\


4
我可以看到我有空格(来自cmd和Python),但我不知道怎么去除它们。我已经撞了三个小时的墙了! - Alex

59

我之前也遇到过同样的问题,要解决它,你可以采取以下两种方法之一:

  • 将所有变量放在系统变量中,而不是用户变量,并添加你想要加入PATH的变量。

或者

  • 将所有变量放在用户变量中,并在用户变量中创建或编辑PATH变量,而不是在系统变量中。系统变量中的Path变量不会扩展用户变量。

如果以上方法都正确但问题仍然存在,则需要检查系统注册表,在HKEY_CURRENT_USER\Environment中确保"PATH"键类型为REG_EXPAND_SZ(而不是REG_SZ)。


2
嗨@pcmind,我的设置为REG_SZ,现在我该怎么办? - Rahmathullah M
复制“PATH”键(类型为REG_SZ)的值,删除“PATH”键,创建一个新的类型为REG_EXPAND_SZ的键,并粘贴旧值。重新启动计算机。 - Zhe Hu
这可能是一个选项。然而,下面的建议更有意义。如果没有空间问题,即使在用户和系统级别都定义,它也应该可以工作。 - Saman
Windows 10有与pcmind所述的相同问题和解决方法。 - gt124
微软公司付出了很多努力来制造问题。 - Mehdi
显示剩余3条评论

53
我的问题其实很简单:重新启动命令提示符,新的变量就会更新。

17
请勿忽视这个答案;在十次中有九次,这就是问题所在。 - aguertin
这是因为每个进程都会获得一组环境变量,当您退出并启动cmd时,该进程将获得新的路径变量。 - yeah_well

16

像 %PATH% 中存在空格或空格将会破坏它。请注意。

是的,包含空格的 Windows 路径将导致错误。例如,应用程序将以下内容添加到系统 %PATH% 变量定义的前面:

C:\Program Files (x86)\WebEx\Productivity Tools;C:\Sybase\IQ-16_0\Bin64;

此问题导致cmd窗口中未设置%PATH%中的所有路径。

我的解决方案是在需要的地方用双引号标记扩展路径变量:

"C:\Program Files (x86)\WebEx\Productivity Tools";C:\Sybase\IQ-16_0\Bin64;
空格将被忽略,因此完整的路径变量将被正确解析。

可能会导致少数用户出现错误。我正在调查类似的问题,但你在这里的结论是不正确的。大多数用户在路径前后添加空格没有问题,分号是一个很好的分隔符,意味着不需要引号,但我们发现对于一些用户来说这是真的。为什么只有一小部分用户会受到这种影响,而其他人则不会?目前还不清楚。这就是为什么该应用程序将自己添加为此类应用程序的原因,而不是一些简单的遗漏。 - dyasta
有时候这并没有帮助。在我的情况下 - C:\Program Files (x86)\Microsoft Visual Studio\Shared\Python36_64\Scripts。它仍然会出现错误。 - Andrey

5
和需要添加到用户变量的PATH变量中,而不是系统变量中。

1
不是这样的。我把它们放在系统变量中了。对我来说,路径中的空格,比如 C:\Program Files,导致了 OP 的问题。 - Silviu Burcea

5

如果PATH中有任何错误,Windows将会静默地忽略它。例如,在路径中使用%PATH%或者路径项之间有空格都会导致PATH失效。请注意。


这对我有用!我完全不知道这个。 - user1300214
例如,我刚刚注意到我的路径包含了文本%NVM_HOME%,即使这是一个已定义的变量。在我注意到之后,我发现它之前有一个%CHOCOLATEY_HOME%,这是我卸载chocolatey后留下来的,所以没有为该变量定义。我从路径中删除了chocolatey变量,然后NVM_HOME变量被其值正确替换了。令人惊讶的是,像这样的基本问题仍然存在于Windows中。这让我想知道还有什么其他的问题存在... - Razzle

5

确保您正在使用管理员命令提示符,这很重要 - 我的工作机器上的系统锁定意味着当输入mvn --version时,标准cmd只会报告找不到mvn。

要使用,请单击“开始>所有程序>附件”,右键单击“命令提示符”并选择“以管理员身份运行”。


4
为了解决这个问题,我使用了setx命令,它尝试设置用户级别的变量。
我用的是以下命令...
setx JAVA_HOME "C:\Program Files\Java\jdk1.8.0_92"

setx PATH %JAVA_HOME%\bin

注意:Windows会尝试将提供的变量值附加到现有变量值中。因此,无需提供额外的%PATH%...可以像这样使用%JAVA_HOME%\bin;%PATH%

2
有另外一种方法,可以通过进入控制面板-->所有控制面板项目-->用户帐户,然后在左侧导航中单击“更改我的环境变量”来实现。但是,在Windows 7和10中,这种方法似乎无效。在微软解决此问题之前,我们可以使用上述方式的setx命令。 - Venkateswara Rao

3
如果将用户的PATH变量连接到环境PATH变量后,PATH值会过长,则Windows将默默地无法连接用户PATH变量。这很容易发生在安装新软件并添加了某些内容以破坏现有安装软件后。Windows失败了!
最好的解决方法是编辑控制面板中的一个PATH变量并删除您不需要的条目。然后打开新的CMD窗口,查看是否在“echo %PATH%”中显示了所有条目。

2

在我的Windows 7系统中。

// not working for me
D:\php\php-7.2.6-nts\php.exe

// works fine
D:\php\php-7.2.6-nts

这是我的问题。谢谢! - Akaisteph7

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接