微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在batch file中,如何获取其名称是另一个环境variables的值的环境variables的值?

如果我知道一个环境variables包含另一个环境variables的名称,我怎么能得到第二个环境variables的值?

假设我有一个文件java.properties旁边我的batch file与以下内容

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%的等效操作。 我可以弄清楚我在找什么样的环境variables,但是我不知道如何得到它的价值。 这是我迄今为止…

@echo off setlocal enabledelayedexpansion if exist %~dp0java.properties ( echo "Found java properties." for /F "tokens=1* usebackq delims==" %%A IN (%~dp0java.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%

我想要做的是检查环境variablesJAVA_HOME_1_7_0_17存在,如果存在,则使用它的值来设置JAVA_HOME 。

Windows批处理:如何删除所有空白(或空)行

Linux中的现代批处理

如何将命令的结果批量存储到variables中?

IF DEFINED与IF之间的区别“!_Variable!”NEQ“”

在Windows批处理中将string转换为整数

更新

我认为嵌套的if语句会使事情变得更加困难。 我摆脱了他们,以下似乎工作。

@echo off setlocal enabledelayedexpansion if not exist "%~dp0java.properties" ( goto:EOF ) for /F "tokens=1* usebackq delims==" %%A IN ("%~dp0java.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%"

如何在batch file执行后在Python中closures命令提示符窗口?

如何将命令的输出redirect到环境variables中定义的文件名称

如何检查batch file是否存在包含指定string的文件

批命令使用“@”

Windows 7closures与隐藏的消息框

试试set JAVA_HOME=%!JAVA_HOME_OVERRIDE_ENV_VAR!% 。

编辑:这应该不工作,如果!JAVA_HOME_OVERRIDE_ENV_VAR! 被设置在同一行。 尝试

call set JAVA_HOME=!%JAVA_HOME_OVERRIDE_ENV_VAR%!

不利的一面是,因为它会在名称set的文件/可执行文件搜索磁盘,所以命令应该花费更长的时间才能完成,尽管它只能在大循环中显着。

编辑2:也试试这个…

(在前面添加set override=0 , if not , if not添加set override=1 ,并替换endlocal行)

@echo off setlocal enabledelayedexpansion set override=0 if exist %~dp0java.properties ( echo "Found java properties." for /F "tokens=1* usebackq delims==" %%A IN (%~dp0java.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!" set override=1 REM Assume JAVA_HOME_OVERRIDE_ENV_VAR is JAVA_HOME_1_7_0_17 ) ) endlocal & if override=1 set JAVA_HOME=!%JAVA_HOME_OVERRIDE_ENV_VAR%!

我将使用FINDSTR过滤出相关的行,IF DEFINED来验证变量的存在,并在循环中延迟扩展以获得适当的值。

你的代码可以像下面这样简单:

@echo off setlocal enableDelayedExpansion for /f "tokens=1* delims==" %%A in ( '2^>nul findstr /bil "JAVA_HOME_OVERRIDE_ENV_VAR=" "%~dp0java.properties"' ) do if defined %%B set "JAVA_HOME=!%%B!" endlocal & set "JAVA_HOME=%JAVA_HOME%"

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐