稍后我尝试访问 TOMCAT_VER 的值,但它显示为空字符串。
if exist "%_REALPATH%\tomcat-%TOMCAT_VER2%" (
set CATALINA_HOME=%_REALPATH%\tomcat-%TOMCAT_VER2%
set TOMCAT_VER=%TOMCAT_VER2%
echo "%TOMCAT_VER%"
) else if exist "%TOMCAT_VER2%" (
set CATALINA_HOME="%TOMCAT_VER2%"
set TOMCAT_VER="%TOMCAT_VER2%"
echo "%TOMCAT_VER%"
)
为了进一步调试,我在其设置位置的正下方插入了一个 echo 语句,但它似乎不起作用。在禁用 echo off 的情况下,我可以看到显示这些变量已设置的语句,但我似乎无法将它们打印出来。
最佳答案
您发现了 bbb(批量初学者错误),但不是变量为空,而是扩展没有按预期工作。
在解析一行或一个完整的括号 block 时,在执行代码之前完成百分比扩展。
但是要解决这个问题,您可以使用延迟扩展,它不会在解析时扩展,它只在执行时扩展。
EnableDelayedExpansion 添加了一个额外的语法来扩展变量:!var!
。
扩展百分比 %var%
仍然可用,并且不会因延迟扩展而改变。
!var!
的延迟扩展是在执行表达式时完成的,尽管 %var%
将被扩展在解析(完整的代码块)时,在执行 block 中的任何命令之前。
setlocal EnableDelayedExpansion
if exist "!_REALPATH!\tomcat-!TOMCAT_VER2!" (
set "CATALINA_HOME=!_REALPATH!\tomcat-!TOMCAT_VER2!"
set "TOMCAT_VER=!TOMCAT_VER2!"
echo !TOMCAT_VER!
) else if exist "!TOMCAT_VER2!" (
set "CATALINA_HOME=!TOMCAT_VER2!"
set "TOMCAT_VER=!TOMCAT_VER2!"
echo !TOMCAT_VER!
)
关于windows - 为什么我的设置命令没有存储任何内容?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14347038/