It's not possible with that syntax -- you're trying to nest IF expansion, which would break a few zillion batch files. I.e., what would happen with something like:
if "%condition"=="true" echo true
What you want it to do is to expand %condition, and then rewind the parser to the second word inside the first argument. The consequences everywhere else would be horrible.
Use %@IF -- that's what it was designed for.
I wanted to test this (paraphrased, a win in tic-tac-toe, repreatedly)
Code:
(b0==b1 && b1==b2) || (b3==b4 && b4==b5) || (b6==b7 && b7==b8) || (b0==b3 && b3==b6) || (b1==b4 && b4==b7) || (b2==b5 && b5==b8) || (b0==b4 && b4==b8) || (b2==b4 && b4==b6)
In C, a macro works nicely and I was hoping to do something similar in a BTMfile. I wound up with a subroutine:
Code:
:winner
if %b[0] == %b[1] .and. %b[1] == %b[2] return 1
if %b[3] == %b[4] .and. %b[4] == %b[5] return 1
if %b[6] == %b[7] .and. %b[7] == %b[8] return 1
if %b[0] == %b[3] .and. %b[3] == %b[6] return 1
if %b[1] == %b[4] .and. %b[4] == %b[7] return 1
if %b[2] == %b[5] .and. %b[5] == %b[8] return 1
if %b[0] == %b[4] .and. %b[4] == %b[8] return 1
if %b[2] == %b[4] .and. %b[4] == %b[6] return 1
return 0
and
Code:
iff %@exec[gosub winner] EQ 1 then ...
This saves (some) unnecessary variable expansion as would occur with with the conditional expression all on one line (as it would be with %@IF or even my environment variable idea). Have you any ideas for making it faster?
History: Two complete idiots play tic-tac-toe, randomly choosing (from the empty squares) where to put their mark. What is the probability that such a game will result in a win? At first I MonteCarlo'd it ... in C, taking overnight, 10,000,000,000 games to get a solid 6-decimal place estimate. Then I simply played all 9! possible games and got the exact answer; that took a split second in C and about 4 hours with a batch file (just for kicks)). The answer, somewhat surprisingly, is exactly 55/63 (about .873).