setx PATH
时需要小心,因为它会直接解析 %NEWPATH%
,结果字符串可能再次过长... 因此,只应该使用对话框而不是命令行来采用这种方法。 - IceFirepdflatex
必须在PATH
中,如果我把pdflatex
的位置放到NEWPATH
中,pdflatex
就找不到了("the command pdflatex
is not recognized")。 - Olorin有几种方法可以清理您的路径变量。最简单的方法是使用Rapid Environment Editor。这个免费实用程序将会:
我按照上述步骤进行操作,并且只在最长的路径上使用第三步,直到路径变量大小再次得到控制。
如果您想进一步提高水平,这里有一个小型的C#工具,您可以修改它以实现其他逻辑。
另一个解决方案,或者更是一个绕过 PATH 环境变量长度限制的解决方法,是使用PowerShell脚本来管理您的路径(添加、删除或更新);
通过单击“编辑文本”(请参见上面的屏幕截图),捕获当前 PATH 变量,并将其复制到剪贴板中并保存在文本文件中作为备份,以避免出现意外情况。这不是强制性的,但如果出现问题,它将允许您进行恢复。
现在,已经备份好了,将以下内容添加到新的 PowerShell (.ps1) 文件中(在下面的第一行中修改要添加的文件夹路径(+号后面的部分)):
$newPath = $env:Path + '; C:\Users\....\FirstFolderToAddToPath; C:\Users\....\SecondFolderToAddToPath;'
[Environment]::SetEnvironmentVariable("Path", $newPath, "Machine")
$env:Path = $newPath
在我尝试修改Windows 10界面后,由于路径长度限制丢失了大部分的路径变量,以下是我成功恢复(较长的)PATH变量的方法。
setx /m
截断为1048个字符 :(. 您还可以在文本编辑器中编辑路径,然后只需执行[Environment]::SetEnvironmentVariable("Path", '\my\new;path1', "Machine")
。您需要管理员Shell。 - Shital Shah尝试使用RegEdit进行修改。在我的情况下,当长度大于3000时才有效。
按下Win+R,输入regedit
以打开RegEdit。转到计算机\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment
,并修改Path
的值为您的路径。然后重启计算机,应该就可以正常工作了。
无法编辑路径:写入值的新内容时出错
。 - one-hand-octopus除了Swapnil的答案,请注意您可以修改Path环境变量的最大长度 - 否则该长度限制为2048个字符(而单个路径具有206个字符的历史限制)。
在Windows 10中,您可以通过将LongPathsEnabled
注册表键设置为1来实现此目的,该键位于此处:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\FileSystem
要访问注册表编辑器:Windows键 + R,键入Regedit
。
来源:Windows 10“启用NTFS长路径策略”选项丢失
还请查看此超级用户回答:一个回答 Windows 10“启用NTFS长路径策略”选项丢失
请注意,“环境变量过大”错误与整个变量相关,而不是当前正在添加的单个路径(以回答下面的“不准确的建议”评论)。
与LongPathsEnabled
相关的注册表键/组策略中的文本如下:
启用NTFS长路径将允许显式申明了long path的Win32应用程序和Windows Store应用程序访问超出每个节点正常260字符限制的路径。启用此设置将使长路径可在进程内访问。
这里的警告是术语显式申明。一般来说,应用程序需要在清单文件中明确声明功能;自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>
更多信息在此处。
一些用户抱怨Windows资源管理器和其他应用程序尚未支持LongPathsEnabled
,虽然通常可以找到工作替代方案。例如,在这篇论坛帖子中,一个用户说:
唯一支持长路径和长文件名的资源管理器替代品是总指挥。它还允许编辑文件名和打开/处理文件,如果接受应用程序也使用扩展API函数。
记事本似乎支持。MKVtoolnix也是。令人惊讶的是,即使多年未被开发,MPC-HC也支持。不出所料,糟糕的VLC不支持(严肃吗?),可爱的PotPlayer也不支持。
此外,还有一个有趣的SuperUser讨论。特别是,这个答案描述了使用Cygwin(一个*nix仿真层)或使用NTFS Junction Points(实质上是链接,像符号链接)拆分长路径的两个可行替代方案。
Path
变量的长度为260,但我编辑了帖子以进行更正。单个路径具有206的历史限制,而Path
变量的总长度为2048,后者的限制可以根据说明进行修改。 - alelom我将所有路径都改为变量形式,包括Program Files和programdata(后者只省了一个字符,但不太重要)。
例如对于Node.js,我将普通路径
C:\Program Files\nodejs\
改为
%ProgramFiles%\nodejs\
同样,对于"C:\Program Files (x86)",也可以使用"%ProgramFiles(x86)%"来代替。
虽然这样做只省了几个字符,但足以避免出现问题。
我发现你可以通过PowerShell实现。
[System.Environment]::SetEnvironmentVariable("PATH", "C:\Program Files (x86......etc.....", "Machine")
显然,Rapid Environment Editor可以为您完成此操作(来自Shital Shah的答案),但您还可以将路径缩短为其8.3文件名版本。仅使用这四个替换,您就可以获得很多收益:
C:\Program Files --> C:\PROGRA~1
C:\Program Files (x86) --> C:\PROGRA~2
C:\Users\vd-wps\AppData\Roaming --> %APPDATA%
C:\Users\vd-wps\AppData\Local --> %LOCALAPPDATA%
如果你将当前路径复制到记事本中,请先搜索并替换C:\Program Files (x86)
,然后再替换C:\Program Files
。
除了其他方法(例如PowerShell),我发现有一个不错的GUI界面,"Rapid Environment Editor"可以处理更大的文本值。
最初的回答:除了其他方法(如PowerShell),我发现一个很好用的GUI界面,叫做“Rapid Environment Editor”,它可以处理更大的文本值。解决方法:
请重新启动系统。重新启动后,PATH不再为空,但可能会被截断为2047(4095)个字符。
如果重新启动系统无法解决问题,请执行以下操作:
启动 C:\windows\system32\regedit.exe。进入注册表项"HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment"并从“Path”键中清除不必要的目录。然后重新启动系统。
注意:在某些特殊情况下,如果系统无法启动,请执行以下操作:
Login in the safe mode
Open the command prompt shell and type:
reg add "HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment" /v Path /t REG_EXPAND_SZ /d ^%SystemRoot^%\system32;^%SystemRoot^% /f
更多详情请参考:
4095
? - Dan M.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
中。 - pbarney
PATH
环境变量。 正确的解决方案已经存在将近20年了。但是让开发人员使用它就像拔牙一样困难。 - Ian Boyd