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.
您是否也将所有需要的变量保存在系统变量中?因为为了扩展这些值,系统必须拥有所有所需变量的“永久”内存。
如果您在命令行上连续执行所有这些操作,只需输入X=something和Y=%X%;else,那么当您将路径设置为 时PATH=%PATH%;%Y%,shell 会在保存 PATH 的新值之前扩展所有变量的值;但是一旦您关闭命令提示符窗口,系统就完全忘记了%X%和%Y%。
但是,如果您使用系统属性控制面板将 PATH 设置为包含未展开的变量,那么在重新启动时所有这些变量都必须作为系统变量存在,否则它们将无法展开。
要确保保存系统中的所有变量以便它们在重新启动后仍然存在,请使用系统属性控制面板或SETX.EXE命令。如果您打算在系统路径(不仅仅是您的用户帐户的路径)中使用它们,那么您将需要使用SETX /M X=blah或系统属性 | 的底部部分。环境变量选项卡,标记为“系统变量”。