有没有办法在 Windows 操作系统上永久设置超过 4096 个字符的环境变量?

有没有办法在 Windows 操作系统上永久设置超过 4096 个字符的环境变量?

我目前正在寻找一种方法来克服 Windows 操作系统上环境变量长度的限制,我已经达到的最大限制是 4133。但对于我的项目,我需要检查具有更长路径环境的系统安装(8000、16000 甚至最大 32000)。

setx 命令已过时,因为它自动将路径环境截断为 1024 个字符。

我尝试了 PowerShell 的 API SetEnvironmentVariable(),它似乎有~4133 个字符的限制,其余的会被自动截断或无法正常运行。

有什么方法可以克服这个限制吗?

答案1

微软的文档说,Windows 上的环境变量仅限于 32,767 个字符(关联)它没有说明如何创建一个非常长的变量。

这里的问题是 Windows 提供的工具都有其局限性:

  • set 和 setx 命令将值截断为 1023 个字符。

  • 直接在注册表中设置 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment会失败,因为 regedit 会在 2047 个字符后截断输入的字符串。

据我所知,你唯一剩下的选择是使用 Windows API 函数编写一个小程序 设置环境变量,其文档规定字符数限制为 32,767 个。脚本在这里无济于事,因为它们也有限制。

答案2

我对脚本做了一些小修改https://gallery.technet.microsoft.com/scriptcenter/How-to-check-for-duplicate-5d9dd711

并且适用于我的 Win 10 长路径

$RegKey = ([Microsoft.Win32.Registry]::LocalMachine).OpenSubKey("SYSTEM\CurrentControlSet\Control\Session Manager\Environment", $True)
$PathValue = $RegKey.GetValue("Path", $Null, "DoNotExpandEnvironmentNames")
Write-host "Original path :" + $PathValue 


$NewValue = $PathValue + ";C:\Program Files\Microsoft\ML Server\PYTHON_SERVER;C:\Program Files\Microsoft\ML Server\PYTHON_SERVER\Library\bin;C:\Program Files\Microsoft\ML Server\PYTHON_SERVER\Library\scripts"
$RegKey.SetValue("Path", $NewValue, [Microsoft.Win32.RegistryValueKind]::ExpandString)
Write-Host "New Path :" + $NewValue


$RegKey.Close()

相关内容