I'm seeing this on TCC 14.01.33 x64 but it was the same in previous versions, so maybe this isn't a bug? If a nested IF statement has a false condition and does not have an ELSE block, then the enclosing IF block is exited.
@echo off
set outer=1
set inner1=
set inner2=1
rem Possible bug: Should print "inner2" but does not
if defined outer (
echo outer
if defined inner1 (
echo inner1
)
if defined inner2 (
echo inner2
)
)
rem Workaround: add empty else block
if defined outer (
echo outer
if defined inner1 (
echo inner1
) else ( )
if defined inner2 (
echo inner2
) else ( )
)
@echo off
set outer=1
set inner1=
set inner2=1
rem Possible bug: Should print "inner2" but does not
if defined outer (
echo outer
if defined inner1 (
echo inner1
)
if defined inner2 (
echo inner2
)
)
rem Workaround: add empty else block
if defined outer (
echo outer
if defined inner1 (
echo inner1
) else ( )
if defined inner2 (
echo inner2
) else ( )
)