如何在批处理文件中访问其他变量中的环境变量的值

时间:2014-12-01 09:02:22

标签: batch-file

这是我的代码:

SET JAVA_VERSION=%1 
REM here lets assume the user enter a JAVA_7_HOME as an argument   
@ECHO %JAVA_VERSION% 
REM this print me JAVA_7_HOME because JAVA_7_HOME is STRING
REM Now I want to access to the value of environment variable JAVA_7_HOME so I done this :
if %%%JAVA_7_HOME%%%  ==[]GOTO INDEFINED_VARIABLE 
REM here I concatinate JAVA_7_HOME with % % at the left and at the right but doesn't works

我不知道如何访问环境变量JAVA_7_HOME的值。

谢谢你。

2 个答案:

答案 0 :(得分:1)

CALL SET JAVA_VERSION=%%%1%%

该行将被解析为

CALL SET JAVA_VERSION=%JAVA_7_HOME%

现在,执行call命令并重新排序行,最后执行的命令是

SET JAVA_VERSION=C:\SomeWhere

此外,您可以启用延迟扩展并执行

SETLOCAL EnableDelayedExpansion
SET JAVA_VERSION=!%1!    

答案 1 :(得分:0)

我支持这个主题:),所以你的解决方案在没有循环的情况下工作正常但现在我改变了概念,我有一个名为CONTEXT_VARAIABLE的变量,其中包含一些环境变量的名称,例如我的情况是: / p>

CONTEXT_VARAIABLE=JAVA_HOME;JBOSS_HOME

所以现在我从这个变量CONTEXT_VARAIABLE循环来获取每个变量并对它进行一些处理,所以我的代码是:

setlocal EnableDelayedExpansion
FOR %%L IN (%SOLIFE_VERSION%) DO ( 
    SET JAVA_JBOSS_HOME=%%%%L%% 
    @ECHO !JAVA_JBOSS_HOME! 
)

这里每次循环打印我: %JAVA_HOME% %JBOSS_HOME% 现在我的问题我想访问这些变量,如果我使用CALL SET它会出错,因为我认为我们不允许在循环中使用CALL SET。 如果你对这个问题有所了解,那就请。

谢谢。