如果我知道一个环境变量包含另一个环境变量的名称,如何获取第二个环境变量的值?
假设我的java.properties
批处理文件旁边有一个文件,其中包含以下内容。
JAVA_HOME_OVERRIDE_ENV_VAR=JAVA_HOME_1_7_0_17
我想要做的是检查是否JAVA_HOME_1_7_0_17
已设置,如果是,则执行相当于set JAVA_HOME=%JAVA_HOME_1_7_0_17%
. 我可以弄清楚我正在寻找什么环境变量,但我不知道如何获得它的值。这是我目前所拥有的......
@echo off
setlocal enabledelayedexpansion
if exist %~dp0\java.properties (
echo "Found java properties."
for /F "tokens=1* usebackq delims==" %%A IN (%~dp0\java.properties) DO (
if "%%A"=="JAVA_HOME_OVERRIDE_ENV_VAR" set JAVA_HOME_OVERRIDE_ENV_VAR=%%B
)
if not [!JAVA_HOME_OVERRIDE_ENV_VAR!] == [] (
echo "Override var is !JAVA_HOME_OVERRIDE_ENV_VAR!"
REM This is where I'm stuck!!!
REM Assume JAVA_HOME_OVERRIDE_ENV_VAR is JAVA_HOME_1_7_0_17
)
)
endlocal & set JAVA_HOME=%JAVA_HOME%
我想要做的是检查环境变量是否JAVA_HOME_1_7_0_17
存在,如果存在,使用它的值来设置JAVA_HOME
。
更新
我认为嵌套的 if 语句使事情变得比需要的更困难。我摆脱了它们,以下似乎有效。
@echo off
setlocal enabledelayedexpansion
if not exist "%~dp0\java.properties" (
goto:EOF
)
for /F "tokens=1* usebackq delims==" %%A IN ("%~dp0\java.properties") DO (
if "%%A"=="JAVA_HOME_OVERRIDE_ENV_VAR" set JAVA_HOME_OVERRIDE_ENV_VAR=%%B
)
if [!JAVA_HOME_OVERRIDE_ENV_VAR!] == [] (
goto:EOF
)
set JAVA_HOME=!%JAVA_HOME_OVERRIDE_ENV_VAR%!
endlocal & set JAVA_HOME="%JAVA_HOME%"