我目前正在寻找一种方法来克服 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()