35

如果我添加C:\Program Files (x86)\WinMerge到用户PATH变量(通过右键单击计算机 -> 高级系统设置 -> 环境变量),一旦我打开一个新的 cmd shell WinmergeU.exe 将无法识别。如果我将该路径添加到 SystemPATH变量,则 WinmergeU.exe 会被正确识别。我虽然用户和系统之间没有区别,但如果我在系统上设置它,所有用户都会看到它,而用户PATH是本地的。难道我做错了什么?

编辑1:

在下文中,您首先可以看到C:\Program Files (x86)\WinMerge添加到系统PATH变量(但不添加到用户)的情况,然后是添加到用户PATH变量(但不添加到系统)的情况。在第一种情况下,Winmerge 窗口正确启动(未显示),您可以看到路径由 echo %PATH% 命令显示。在第二种情况下,它不会启动,并且 echo %PATH% 不会显示它的路径。(请注意,在截取这些屏幕截图之前,我清楚地确认了 OK 并关闭了环境变量窗口,并且在更改 PATH 并按下 ok 后立即打开了一个新的 cmd)。这个问题可能与我在这里的问题有关(回声 %PATH% 是否扩展到仅系统或用户变量?)但因为它可能不是我发布了两个不同的问题。

系统

用户

4

3 回答 3

44

您一定是出了点问题,或者您的机器存在环境问题。添加用户PATH环境变量确实会导致它被合并到新进程的环境中。

更新:也许来自 MSDN 主题的关于环境变量的评论可能是相关的:

发现在 Windows Server 2003 上,一旦系统 PATH 超过 1920 个字符,用户 PATH 环境变量不再与其合并以设置进程 PATH 环境变量,即使完整的系统 PATH(即使更大)将包含在进程 PATH 变量。

于 2014-01-21T23:05:27.020 回答
1

在 Windows 7 上,还要确保系统路径不以反斜杠结尾。如果是这样,则 USER PATH 会像往常一样附加到系统路径,但在换行符之后,这会破坏事情。在后一种情况下,简单的命令“path”和“echo %PATH%”将打印 2 个不同的输出。

于 2016-08-23T15:32:43.470 回答
-1

对于 16.6,我已确认此问题也是路径长度问题。在 cmd 提示符下,键入“set”,您可以看到所有 env。变量。不包括用户路径节奏变量和其他变量。我保存了原始的完整路径文本,然后我检查并修剪了被认为不必要的特定(系统)路径元素。在此之后,在一个新的 cmd 会话中,现在键入“set”会显示附加到系统路径元素末尾的用户路径元素,因为它们现在适合。

于 2015-05-26T21:23:47.300 回答