Windows 环境变量不能正常工作
我正在尝试运行一个应用程序,该应用程序读取一个环境变量,该环境变量包含一个约22k个字符的JSON。项目设置告诉我使用Windows 环境变量不能正常工作,windows,powershell,environment-variables,Windows,Powershell,Environment Variables,我正在尝试运行一个应用程序,该应用程序读取一个环境变量,该环境变量包含一个约22k个字符的JSON。项目设置告诉我使用$(cat./path/to/file)来正确配置它,但由于我使用的是windows,这些命令不起作用 我曾尝试使用GUI环境变量将文件内容复制到变量中,但其输入会将值截断到某个限制,该限制甚至不在文件的一半上。 在此之后,我尝试使用Powershell命令设置变量: $env:myvar = iex '$(type path/to/file)' 然后使用以下命令保存结果: [
$(cat./path/to/file)
来正确配置它,但由于我使用的是windows,这些命令不起作用
我曾尝试使用GUI环境变量将文件内容复制到变量中,但其输入会将值截断到某个限制,该限制甚至不在文件的一半上。
在此之后,我尝试使用Powershell命令设置变量:
$env:myvar = iex '$(type path/to/file)'
然后使用以下命令保存结果:
[System.Environment]::SetEnvironmentVariable('MYVAR', $env:MYVAR, [System.EnvironmentVariableTarget]::Machine)
执行这些命令后,Powershell能够正确打印结果,但当Iecho
it时,CMD仍然只打印部分值
这很奇怪,因为regedit显示了正确的值
应用程序仍然无法处理该值,因为它尚未完成
是否对此进行了修复?请尝试键入命令。它是unix cat命令的windows等效命令。这意味着将json存储在一个单独的文件中,并使用命令“type”。尝试使用type命令。它是unix cat命令的windows等效命令。这意味着将json存储在一个单独的文件中,并使用命令“type”。注意:这个答案适用于Windows tl;dr
- 虽然在单个环境变量中最多可以存储
个字符,但32766
和PowerShell/.NET(从v7.1/5.0开始)中的标准检索机制最多只能支持cmd.exe
4095
- PowerShell中的一个解决方案是可行的,但最终要解决的问题是,用于读取环境变量值的目标可执行文件是否支持读取最大技术长度的值
- 单个环境变量中字符数的技术限制为
(32766
=32KB
,减去32768
)2
- 从Windows Server 2008/Windows Vista开始,环境块的总体大小不再有限制-请参阅
- 但是,根据检索环境变量的方式,限制可能会更低:
- 从v7.1/.NET 5.0开始,
和PowerShell都支持最多检索cmd.exe
个字符。4095
- 但是,在PowerShell中,您可以检索更长的值,假设感兴趣的变量是在注册表中持久定义的,并且假设您知道它是在计算机级别还是在用户级别定义的;e、 例如,对于
环境变量:MYVAR
- 在机器层面:
- 在用户级别:
- 从v7.1/.NET 5.0开始,
- 虽然在单个环境变量中最多可以存储
个字符,但32766
和PowerShell/.NET(从v7.1/5.0开始)中的标准检索机制最多只能支持cmd.exe
4095
- PowerShell中的一个解决方案是可行的,但最终要解决的问题是,用于读取环境变量值的目标可执行文件是否支持读取最大技术长度的值
- 单个环境变量中字符数的技术限制为
(32766
=32KB
,减去32768
)2
- 从Windows Server 2008/Windows Vista开始,环境块的总体大小不再有限制-请参阅
- 但是,根据检索环境变量的方式,限制可能会更低:
- 从v7.1/.NET 5.0开始,
和PowerShell都支持最多检索cmd.exe
个字符。4095
- 但是,在PowerShell中,您可以检索更长的值,假设感兴趣的变量是在注册表中持久定义的,并且假设您知道它是在计算机级别还是在用户级别定义的;e、 例如,对于
环境变量:MYVAR
- 在机器层面:
- 在用户级别:
- 从v7.1/.NET 5.0开始,
Get-ItemPropertyValue 'registry::HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment' MYVAR
Get-ItemPropertyValue registry::HKEY_CURRENT_USER\Environment MYVAR