いつから間違っていたのか覚えていないくらい前から拡張子の優先順位はこうだと思っていました。

  • bat
  • cmd
  • com
  • exe(以下続く)

しかしこれは間違いだったことが判明。

  • com
  • exe
  • bat
  • cmd(以下続く)

うわー以前「バッチファイルと同じ名前のexeファイルを同一フォルダに配置すると無限ループで実行される」ってトラブル相談を受けたことがあって、その時に勘違いしたのかなぁ。CreateProcessで実行するときは明示的にbatをつけていたんだけれど。
ちなみに環境変数PATHEXTに載っている順序みたいです。