That doesn't make sense - you know it's a regex. You don't know what the regex *is* without a SET, but you don't know the value of any of the other types either without a SET. Why would breaking @VARTYPE be an improvement over simply looking at the variable?
Regarding type 3 - it doesn't really matter if I allow 0x. Everybody who's been using it will have to modify their code to accept it.
Both of these suggestions are breaking changes, and I'm not going to change @VARTYPE to break every batch file / alias that has been using it.