Windows环境变量嵌套的限制?

try*_*tch 10 windows variables environment nested

那么,环境变量在Windows中嵌套的深度是否有限制?我做了很多开发工作,我正在尝试建立我的开发环境变量,而且很多都是相互嵌套的,即.


GLEW=%THIRD_PARTY_ROOT%\GLEW
GLEW_1_5_5=%GLEW%\glew-1.5.5
GLEW_BIN_PATH=%GLEW_ROOT%\bin
GLEW_INCLUDE_PATH=%GLEW_ROOT%\include
GLEW_LIB_PATH=%GLEW_ROOT%\lib
GLEW_ROOT=%GLEW_1_5_5%

OSG=%THIRD_PARTY_ROOT%\OpenSceneGraph
OSG_2_8_3=%OSG%\OpenSceneGraph-2.8.3
OSG_BIN_PATH=%OSG_ROOT%\bin
OSG_INCLUDE_PATH=%OSG_ROOT%\include
OSG_LIB_PATH=%OSG_ROOT%\lib
OSG_ROOT=%OSG_2_8_3%

THIRD_PARTY_ROOT=C:\dev\third-party

Run Code Online (Sandbox Code Playgroud)

但我有一段时间让他们真正适当地扩展.有一段时间,当我查看set的输出时,我只是得到了他们正在按顺序展开的东西,所以任何依赖于foo_ROOT的东西都没有被正确扩展.我尝试启用延迟扩展并没有帮助,但重启似乎......所以可能延迟扩展需要重启..

无论哪种方式,我的PATH变量中都有GLEW_BIN_PATH和OSG_BIN_PATH,它们拒绝扩展.这真是令人沮丧,因为dll正在那里居住,当然我可以得到其他的东西来扩展...任何想法?

编辑:我在PATH变量中将它们作为:

[everything else....];%GLEW_BIN_PATH%;%OSG_BIN_PATH%

所以我没有看到明显的原因阻止他们扩大..

Dom*_*min 13

看起来对变量定义存在词典依赖性.

Windows按字典顺序(:-O)扩展和填充环境变量

您只能在变量上使用"按字典顺序"低于变量的变量.

示例:以下定义:

VAR_01=1
VAR_02=%VAR_01%-2
VAR_03=%VAR_02%-3
Run Code Online (Sandbox Code Playgroud)

产生

VAR_01 is 1
VAR_02 is 1-2
VAR_03 is 1-2-3
Run Code Online (Sandbox Code Playgroud)

VAR_01=1
VAR_02=%VAR_03%-2
VAR_03=%VAR_01%-3
Run Code Online (Sandbox Code Playgroud)

产生

VAR_01 is 1
VAR_02 is -2
VAR_03 is 1-3
Run Code Online (Sandbox Code Playgroud)

扩展VAR_02时未定义到期VAR_03.


ewa*_*all 0

您是否也将所有需要的变量保存在系统变量中?因为为了扩展这些值,系统必须拥有所有所需变量的“永久”内存。

如果您在命令行上连续执行所有这些操作,只需输入X=somethingY=%X%;else,那么当您将路径设置为 时PATH=%PATH%;%Y%,shell 会在保存 PATH 的新值之前扩展所有变量的值;但是一旦您关闭命令提示符窗口,系统就完全忘记了%X%和%Y%。

但是,如果您使用系统属性控制面板将 PATH 设置为包含未展开的变量,那么在重新启动时所有这些变量都必须作为系统变量存在,否则它们将无法展开。

要确保保存系统中的所有变量以便它们在重新启动后仍然存在,请使用系统属性控制面板或SETX.EXE命令。如果您打算在系统路径(不仅仅是您的用户帐户的路径)中使用它们,那么您将需要使用SETX /M X=blah或系统属性 | 的底部部分。环境变量选项卡,标记为“系统变量”。