Windows 10上的环境变量太大


147

我知道这很奇怪,我花了近三天的时间在线搜索解决方案,但没有找到有用的解决方案。所以我决定来这里。

我最近已从Windows 8.1升级到Windows 10。

现在,我想为新安装的Apache Maven设置一个Environment变量。

每次创建用户变量时,一切都很好。但是,我还需要创建系统变量,在其中我需要将bin目录附加到我在用户变量中由Aready创建的变量中,成为“ path”。

现在,每次执行此操作时,我都会得到一条错误消息,内容为:“此环境变量太大。因此,我无法创建路径。

我已附上此错误的图片。

如果有人可以协助我解决这个问题,我将不胜感激。

预先感谢您的协助。在此处输入图片说明


14
我希望他们有一天能解决这个问题。这永远都不会发生。^^
itmuckel

1
正确的解决方案是使应用程序停止滥用PATH环境变量。正确的解决方案已经存在了将近20年。但是让开发人员使用它就像在咬牙。
伊恩·博伊德

Answers:


148

当PATH变量过载过多的值时,它将达到无法再添加值的地步。尝试以下方法可以解决您的问题。

解决方案1:

  1. 创建一个新的系统变量,说“ NEWPATH”
  2. 将bin目录位置分配给'NEWPATH'
  3. 现在追加' ; %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。

希望这对您有所帮助!


是的,你是非常正确的。大量研究表明,路径变量只能包含2048个字符,当字符到达此阶段时,路径变量将不再能够容纳太多字符。所以我尝试了您的建议,现在很好。谢谢
olammy 2015年

谢谢!这是一个好主意@解决方案1!我本该想到这个... :)
Dev-iL

2
这就像一个魅力,谢谢!但是,在使用时必须谨慎,setx PATH因为这将直接解析%NEWPATH%和,结果字符串将再次太长...因此,使用这种方法,应仅使用对话框而不是命令行
IceFire

1
@SwapnilKamat这不能完全起作用:我正在使用miktex,它pdflatex必须位于in PATH,如果我将pdflatexin 的位置放进去NEWPATHpdflatex则不再可以找到它(“命令pdflatex无法识别” ...)
Olorin

7
具有讽刺意味的是,Microsoft SQL Server设置了如此多的路径变量,以至于仅它一个就几乎占满了空间。我创建了一个PATHS_MSSQL变量,然后将%PATHS_MSSQL%添加到PATH变量中以代替它们。释放PATH变量中的大量空间。
史蒂夫·劳埃德

49

清除路径变量的方法很少。最简单的方法是使用Rapid Environment Editor。这个免费的实用程序将

  1. 删除重复的路径(右键单击>清理路径)
  2. 删除不存在的文件夹(以红色显示,需要手动删除)
  3. 用短路径替换长路径(右键单击>长到短路径)。

我按顺序执行上述步骤,仅对最长的路径使用第3步,直到再次控制Path变量大小。

如果要更高级,可以使用以下C#小工具,将其修改为要实现的任何其他逻辑。


在阅读本文之前,我从未听说过任何一种工具,但很高兴!感谢分享!
邵逸夫

2
这个工具很棒!MS应该使其成为Windows附带的官方编辑器!
burzum

35

绕过Environment PATH变量长度限制的另一个解决方案或更多解决方法是使用以下方法管理您的路径(添加,删除或更新): PowerShell脚本。

  1. 通过单击“编辑文本”(请参见上面的屏幕截图)捕获当前的PATH变量,并将其复制到剪贴板中,并将其另存为文本文件作为备份,以免造成意外。这不是强制性的,但如果出现问题,可以让您恢复。

  2. 现在,已对其进行备份,将以下内容添加到新的PowerShell(.ps1)文件中(在下面的第一行中添加要添加的文件夹路径(+号后的部分)):

    $ newPath = $ env:Path +'; C:\ Users .... \ FirstFolderToAddToPath; C:\ Users .... \ SecondFolderToAddToPath;'

    [环境] :: SetEnvironmentVariable(“ Path”,$ newPath,“ Machine”)

    $ env:Path = $ newPath

这是我在玩完Windows 10 UI之后设法恢复(长)PATH变量的方法,但由于长度限制而感到困惑,并且失去了大部分路径。希望对您有所帮助。


谢谢..这很容易。好奇第2行和第3行中的赋值之间的区别是什么
-Nayak

第3行将其设置为当前会话,第2行将其设置为计算机默认值。
Tetsujin no Oni

2
PS工作更长的路径,但传统setx /m截断为1048个字符:(您也可以编辑路径的文本编辑器可以和刚做。[Environment]::SetEnvironmentVariable("Path", '\my\new;path1', "Machine")你需要管理外壳。
清淳沙阿

可以使用PS,但不能使用GUI。嗯,这有什么意义?已投票,谢谢!
传奇

10

除了Swapnil的答案外,请注意,您可以修改Path变量的最大长度-否则最大长度限制为2048个字符(而单个路径的历史限制为206个字符)。在Windows 10中,可以通过将LongPathsEnabled注册表项设置为1来实现此目的,可以在这里找到:

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\FileSystem

要访问注册表编辑器Windows Key+R,请输入:Regedit

资料来源:https : //superuser.com/a/1119980

还可以看看这个超级用户答案:https : //superuser.com/a/1119980/327009

解决以下评论:错误“环境变量太大”与整个变量有关,而不是与当前添加的单个路径有关。


19
这是正确的建议吗?PATH变量(即多个路径的串联)的最大长度为2048个字符。您提到的260个字符是一条路径的最大长度。它们是相关的,但不相同。
Hendy Irawan

7

答案较晚,但我一直在寻找类似的东西,所以到这里结束了。我将所有路径都更改为程序文件和programdata变量的路径(此路径保存为1个字符,尽管不那么重要)。

对于类似nodejs的东西,我更改了

C:\ Program Files \ nodejs \

%ProgramFiles%\ nodejs \

这可以通过“ C:\ Program Files(x86)\”以及“%ProgramFiles(x86)%\”来完成

它节省了我几个字符,但足以使我不再抱怨。


7
为什么不只使用%x86%替换“ C:\ Program Files(x86)”,而使用%x64%替换“ C:\ Program Files”,这似乎是减少字符开销的更好方法。
Xorcist

1
@Xorcist-不错!没有关于这些想法
mark1234

我认为它们默认情况下不存在,但是您可以自己创建它们。
加百利博览会

我也这样做,我为“ c:\ Program Files”创建了%PF%,并使用了大约20次,使我可以缩短路径。
LaBracca

@Xorcist如何通过创建另一个变量来完成?
Demodave

5

我发现您可以通过PowerShell进行操作。

[System.Environment]::SetEnvironmentVariable("PATH", "C:\Program Files (x86......etc.....", "Machine")

因此,我抓取了现有的系统PATH,将其粘贴到记事本中,添加了我的新东西,然后粘贴到上述的“ C:\ Program Files”位中。路径已更新。做完了


4

尝试用by修改regedit,在我的情况下,当长度超过3000时可以使用。

Win + R并输入regedit以打开regedit。转到Computer\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment,然后修改Path您的路径的值。并重新启动计算机,它应该可以工作。


1
这对我来说很好。我认为这比其他方法容易。
shalitha senanayaka

1

解决方法:

请重启系统。重新启动系统后,PATH不再为空,但可能会被截断为2047(4095)个字符。如果系统重新启动没有帮助,请:

启动c:\ windows \ system32 \ regedit.exe转到注册表配置单元“ HKLM \ SYSTEM \ CurrentControlSet \ Control \ Session Manager \ Environment”,通过“ Path”键清理不必要的目录,重新启动系统

注意:在某些特殊情况下,如果系统无法启动,请:

以安全模式登录打开命令提示符外壳,然后键入:reg添加“ HKLM \ SYSTEM \ CurrentControlSet \ Control \ Session Manager \ Environment” / v路径/ t REG_EXPAND_SZ / d ^%SystemRoot ^%\ system32; ^%SystemRoot ^% /F

有关更多详细信息:https : //software.intel.com/zh-cn/articles/limitation-to-the-length-of-the-system-path-variable


如何将限制增加到至少4095
Dan M.


0

显然,Rapid Environment Editor将为您执行此操作(来自@shatil_shah答复),但是您也可以缩短其“ 8dot3”版本的路径。仅用以下两种替代方法,您将获得很多收益:

C:\Program Files       --> C:\PROGRA~1
C:\Program Files (x86) --> C:\PROGRA~2

如果将当前路径复制到记事本中,请首先搜索并替换C:\Program Files (x86),然后单击C:\Progam Files


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.