Annoying CMD.EXE behaviors

Here are the things that separate cmd.exe from a true scripting language. In cmd.exe:
  1. You have to know which commands are scripts and which are programs. Honestly, why did they not fix this when they went to NT?
  2. The .bat language syntax is highly irregular.
  3. Its just buggy. You can write code that works fine one day, and just doesn't work the next.
  4. The syntax that does work is very clunky and inconvenient to use: