如果我知道一个环境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] 举报,一经查实,本站将立刻删除。