I think I ran into a bug in Window\'s batch scripting.
I cannot set variables that are in an expanded if statement.
Here is an isolated part of my script:
Just a remind, the ms-dos "set" command takes every string after the equal sign. So if you write
if "x"=="x" set a=foo else set a=bar
echo %a% // output : foo else set a=bar
The %a% is actually set to "foo else set a=bar", not foo. So I always use "()" for set command if there are multiple commands in one line.
if "%1"=="" (set a=20) else (set a=%1)