Windows 10 上的环境变量太大
Posted
技术标签:
【中文标题】Windows 10 上的环境变量太大【英文标题】:Environment variable is too large on Windows 10 【发布时间】:2016-04-02 04:02:32 【问题描述】:我最近从 Windows 8.1 升级到了 Windows 10。
现在我想为新安装的 Apache Maven 设置一个环境变量。
每次我创建用户变量时,一切都很好。但是,我还需要创建系统变量,我需要将 bin 目录附加到我已经在用户变量中创建的变量为“路径”。
现在,每次执行此操作时,都会收到一条错误消息,提示“此环境变量太大”。因此,我无法创建路径。
我附上了这个错误的图片。
【问题讨论】:
我希望他们有一天能解决这个问题。这不应该发生。^^ 正确的解决方案是应用程序停止滥用PATH
环境变量。 The proper solution has existed for nearly 2 decades now。但是让开发人员使用它就像拔牙一样。
@IanBoyd - 将路径放入App Paths
注册表区域是安装程序要做的事情。不是大多数用户都喜欢的东西。因此,您将矛头指向我们开发人员是正确的。 :(
@JesseChisholm 我们可以让开发人员将他们的应用程序数据放在 AppData 中,而不是 .config
、.dotnet
、@987654328 @、.nuget
、.omnisharp
、.vscode
在用户的个人资料文件夹中!?
@IanBoyd 当然可以!如果您可以说服工具编写者只生活在 Windows 中,并且永远不会在 Linux 中开始他们的工作,那么请迁移到 Windows 和 OS/X。以上列出的文件名中至少有两个来自 Microsoft。 ;-) ;-) ;-)
【参考方案1】:
当 PATH 环境变量因过多的值而过载时,它会达到无法再添加值的地步。尝试以下方法应该可以解决您的问题。
解决方案 1:
-
创建一个新的系统环境变量,比如“NEWPATH”
将 bin 目录位置分配给“NEWPATH”
现在追加'; %NEWPATH%' 到 PATH 环境变量
如果这仍然不起作用,请尝试将 PATH 环境变量的某些部分已经存在的值复制到“NEWPATH”,然后附加“NEWPATH”。
解决方案 2:
如果可以对路径进行分组和缩短,请检查 PATH 环境变量的值。例如,
C:\Program Files\Microsoft SQL Server\102\Tools\Binn;C:\Program Files\Microsoft SQL Server\102\DTS\Bin;
可以组合成
C:\Program Files\Microsoft SQL Server;
通过这种方式,您可以在固定长度的 PATH 变量中构建更多空间,最后将 bin 目录位置调整到 PATH 中。
【讨论】:
这就像一个魅力,谢谢!但是,使用setx PATH
时必须小心,因为这将直接解析%NEWPATH%
,并且生成的字符串将再次太长......所以,使用这种方法,应该只有对话框而不是命令行使用
@SwapnilKamat 这并不完全有效:我正在使用 miktex,它的 pdflatex
必须在 PATH
中,如果我将 pdflatex
的位置放在 NEWPATH
中,@987654328 @ 找不到了(“无法识别命令pdflatex
”...)
具有讽刺意味的是,Microsoft SQL Server 设置了如此多的路径变量,以至于它几乎填满了空间。我创建了一个 PATHS_MSSQL 变量,然后将 %PATHS_MSSQL% 添加到 PATH 变量中以代替它们。在 PATH 变量中释放了大量空间。
很棒的提示。我将其命名为 Path2 以将它们放在一个列表中。
谁在寻找 @steveLloyd 评论的内容。就是这个superuser.com/questions/902907/…【参考方案2】:
有几种方法可以清理路径变量。最简单的是使用Rapid Environment Editor。这个免费的实用程序将,
-
删除重复的路径(右键单击→清理路径)
删除不存在的文件夹(红色显示,需要手动删除)
用短路径替换长路径(右键单击 → 长到短路径)。
我按顺序执行上述步骤,仅对最长的路径使用第三步,直到 Path 变量大小再次受到控制。
如果您想更高级,这里有一个little C# tool,您可以修改为您想要实现的任何其他逻辑。
【讨论】:
在阅读这篇文章之前,我从未听说过这两种工具,但很高兴我听说过!感谢分享! 这个工具太棒了! MS应该让它成为windows自带的官方编辑器! 您必须以管理员权限运行 Rapid Environment Editor。否则这些选项将被禁用。 这太棒了,解决了我的路径问题。【参考方案3】:另一种解决方案,或者更多绕过 PATH 环境变量长度限制的解决方法,是使用 PowerShell 脚本管理您的路径(添加、删除或更新);
通过单击“编辑文本”捕获当前 PATH 变量(参见上面的屏幕截图)并将其复制到剪贴板并将其保存在文本文件中作为备份,以避免意外。这不是强制性的,但可以让您在出现问题时恢复。
现在它已备份,将以下内容添加到新的 PowerShell (.ps1) 文件中(将下面的第一行修改为您要添加的文件夹路径(+
符号之后的部分):
$newPath = $env:Path + '; C:\Users\....\FirstFolderToAddToPath; C:\Users\....\SecondFolderToAddToPath;'
[Environment]::SetEnvironmentVariable("Path", $newPath, "Machine")
$env:Path = $newPath
这就是我在玩 Windows 10 UI 后设法找回我的(长)PATH 变量的方法,但由于长度限制而失去了大部分路径。
【讨论】:
谢谢.. 这很简单。好奇在第 2 行和第 3 行赋值有什么区别 第 3 行将其设置在当前会话中,第 2 行将其设置为机器默认值。 PS 适用于更长的路径,但传统的setx /m
会截断为 1048 个字符 :(。您也可以在文本编辑器中编辑路径,然后执行 [Environment]::SetEnvironmentVariable("Path", '\my\new;path1', "Machine")
。您将需要管理员 shell。
可以使用 PS 但不能使用 GUI。嗯,这有什么意义?点赞,谢谢!
脚本可以工作,但是它还将用户变量 Path(在我的用户帐户下)中定义的变量附加到系统 Path【参考方案4】:
尝试通过RegEdit修改。就我而言,它在长度超过 3000 时有效。
按 Win + R 并输入 regedit
打开 RegEdit。转到Computer\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment
,并将Path
的值修改为您的路径。然后重新启动计算机,它应该可以工作了。
【讨论】:
这对我来说很好用。我认为这比其他方法容易。 尝试修改值,但报错:Cannot edit Path: Error writing the value's new contents
@thinkvantagedu 可能使用管理员帐户可以工作,搜索:google.com/…【参考方案5】:
除了the answer of Swapnil,请注意您可以修改 Path 环境变量的最大长度 - 否则限制为 2048 个字符(而单个路径的历史限制为 206 个字符)。
在 Windows 10 中,您可以通过将 LongPathsEnabled
注册表项设置为 1 来实现此目的,可在此处找到:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\FileSystem
要访问注册表编辑器:Windows 键 + R,键入Regedit
。
来源:Windows 10 “Enable NTFS long paths policy” option missing
还可以看看这个超级用户的回答:An answer to Windows 10 “Enable NTFS long paths policy” option missing
请注意,错误“环境变量太大”与整个变量有关,而不是当前添加的单个路径(回答下面的“不准确的建议”评论)。
补充说明:应用兼容性
注册表项/组策略中与LongPathsEnabled
相关的文本为:
启用 NTFS 长路径将允许 显示的 win32 应用程序和 Windows 应用商店应用程序访问超出每个节点正常 260 个字符限制的路径。启用此设置将导致进程内可访问长路径。`
这里需要注意的是术语表现。一般应用程序需要在manifest file 中显式声明功能;自 Windows Vista 以来的大多数 win32 应用程序都得到了体现。要使用长路径,应用清单需要一个 longPathAware
元素:
<application xmlns="urn:schemas-microsoft-com:asm.v3">
<windowsSettings xmlns:ws2="http://schemas.microsoft.com/SMI/2016/WindowsSettings">
<ws2:longPathAware>true</ws2:longPathAware>
</windowsSettings>
</application>
更多信息here。
一些用户抱怨 Windows Explorer 和其他应用程序尚不支持LongPathsEnabled
,尽管通常可以找到可行的替代方案。例如,在this forum post 中,用户声明
唯一支持长路径和长文件名的资源管理器替代方案是总指挥官。如果接受应用程序也使用扩展 API 功能,它还允许编辑文件名和打开/处理文件。 记事本好像。 MKVtoolnix 也是。此外,非常令人惊讶的是,MPC-HC,尽管它已经多年没有开发了。毫不奇怪,sucky VLC 没有(说真的?)可爱的 PotPlayer 也没有。
还有一个有趣的SuperUser discussion on this。特别是,this answer 描述了使用长路径的两种可行替代方案:使用 Cygwin(*nix 仿真层)或使用 NTFS 连接点(本质上是链接,如符号链接)分割长路径。
【讨论】:
这是准确的建议吗? PATH 变量的最大长度(即多个路径的串联)为 2048 个字符。您提到的 260 个字符是一条路径的最大长度。它们相关但不相同。 是的,它是准确的。我最初错误地写了Path
变量的长度为260,但我编辑了帖子以更正它。单条路径的历史限制为 206,而Path
变量的总长度为 2048,后一个限制可以按照说明进行修改。
请注意。对第二个超级用户回答的评论说:值得注意的是,大多数程序(包括 Windows 资源管理器)还不能识别长文件路径功能
@SimonTewsi 谢谢,我已经添加了一个部分来详细说明这一点。【参考方案6】:
我更改了 Program Files 和 programdata 变量的所有路径(这个保存起来就像一个字符,虽然不那么重要)。
对于Node.js之类的东西,我改了正常路径
C:\Program Files\nodejs\
到
%ProgramFiles%\nodejs\
这可以使用“C:\Program Files (x86)”以及使用“%ProgramFiles(x86)%”来完成。
它为我节省了几个字符,但我觉得它已经停止抱怨了。
【讨论】:
为什么不直接使用 %x86% 替换 "C:\Program Files (x86)" 和 %x64% 替换 "C:\Program Files",看起来这是一个更好的减少方法字符开销。 @Xorcist - 不错!不知道那些 我不认为它们默认存在,但您可以自己创建它们。 我也这样做了,我为“c:\Program FIles”创建了 %PF%,并使用它大约 20 次让我可以缩短路径。 @Xorcist 如何通过创建另一个变量来完成?【参考方案7】:我发现你可以通过 PowerShell 做到这一点。
[System.Environment]::SetEnvironmentVariable("PATH", "C:\Program Files (x86......etc.....", "Machine")
所以我抓住了现有的系统路径,粘贴到Notepad,添加了我的新东西,然后粘贴到上面的“C:\Program Files”位。路径已更新。完成。
【讨论】:
您需要以管理员身份运行 powershell。 我也这样做了,但我只粘贴了我的路径,我的所有路径都被删除了。该死的我的愚蠢【参考方案8】:显然,Rapid Environment Editor 会为您执行此操作(来自Shital Shah's answer),但您也可以缩短到他们的8.3 filename 版本的路径。只需这两个替代品,您将获得很多里程:
C:\Program Files --> C:\PROGRA~1
C:\Program Files (x86) --> C:\PROGRA~2
如果您将当前路径复制到记事本中,请先搜索并替换C:\Program Files (x86)
,然后再搜索并替换C:\Program Files
。
【讨论】:
我最初尝试过这种方法,但是随着系统和应用程序更新将路径添加回使用非 8.3 路径(大概是在发现此字符串不存在于路径)。最终结果是一条比我开始时更长的路径,并且需要手动清理。【参考方案9】:解决方法:
请重新启动系统。重启系统后,PATH 不再为空,但可能会被截断为 2047(4095)个字符
如果系统重启没有帮助,请:
启动C:\windows\system32\regedit.exe。转到注册表配置单元“HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment”并从“Path”键中清理不必要的目录。重启系统。
注意:在某些特殊情况下,如果系统无法启动,请:
以安全模式登录
打开命令提示符shell并输入:
reg add "HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment" /v Path /t REG_EXPAND_SZ /d ^%SystemRoot^%\system32;^%SystemRoot^% /f
更多详情:
Limitation to the length of the System PATH variable
【讨论】:
如何将限制增加到至少4095
?
警告!最后一个reg add
语句将覆盖您现有的路径变量,它们将永远丢失。最好在运行该命令之前先对它们进行备份,以便您可以返回并手动修复问题。备份的方法如下:reg export "HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment" path.tmp /y & type path.tmp|find "Path"|find "C:\\Windows" > path.txt & del path.tmp
您的旧路径将位于path.txt
intel.com 上的原始文章不再可用。这是存档版本:Limitation to the length of the System PATH variable.【参考方案10】:
您也可以尝试检查您的变量,看看是否有任何不相关的路径可以删除。这将为您腾出一些空间来添加另一个或更多变量。
【讨论】:
【参考方案11】:除了其他方法(例如,PowerShell)之外,我还发现了一个不错的 GUI,“Rapid Environment Editor”,它可以处理更大的文本值。
【讨论】:
【参考方案12】:我遇到了完全相同的问题。最终我不得不删除现有变量之一以使总长度小于 2047。
然后我可以将%MAVEN_HOME%\bin
添加到路径变量中。
【讨论】:
【参考方案13】:所以我发现了同样的问题,我注意到有很多重复指向同一个位置。 当您单击“编辑环境变量”按钮时,我删除了可以使用删除选项完成的重复项。
您可以改为编辑文本,从那里复制文本,使用任何流行的应用程序删除重复项,如记事本、excel(使用分隔符为 ; 然后删除重复项),或使用 python(使用 .split(";"),转换成一个集合,";".join(stringSet),复制到一个记事本文件中,然后用ctrl+H替换\,即查找和替换)。
【讨论】:
【参考方案14】:解决方法:使用编辑文本并在文本编辑器中编辑 PATH。
【讨论】:
我正在尝试听从您的建议。我的电脑上存储的环境变量是什么文件? 只是文字。使用记事本打开它 @GabrielFair 您必须单击名为Edit Text
的按钮,而不是打开某些文件。
“编辑文本”在哪里?上下文是什么?
@PeterMortensen 在 Edit Environment Variables 窗口中,在右侧与其他按钮一起,在底部下方。您可以编辑内联文本并超过 2047 的限制。以上是关于Windows 10 上的环境变量太大的主要内容,如果未能解决你的问题,请参考以下文章
Win10 “此环境变量太大。此对话框允许将值设置为最长2047个字符。" 解决方法。