Sebenarnya ini adalah hal sepele, tapi kalo dipikir bikin pusing juga :D.
Pada OS windows, untuk menjalankan program melalui shell (command prompt) bisa dengan menyebutkan nama lengkap file beserta ekstensinya ataupun tidak.
Misalnya ada file programku.exe , maka untuk menjalankannya lewat shell cukup mengetikkan programku saja atau dengan menyebutkan ekstensinya yaitu programku.exe.
Tapi apa jadinya kalau ada beberapa file, misal programku.exe, programku.bat, dan programku.cmd , karena file program yang ber-ekstensi *.bat dan *.cmd bisa dijalankan tanpa menyebutkan ekstensinya juga.
Didalam windows sebenarnya hal ini sudah diatur didaalam environtment variables PATHEXT, untuk mengetahui isinya ketik echo %PATHEXT% lewat command prompt , maka akan keluar daftar ekstensi program yang didukung windows.

.COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH;.RB;.RBW

Didaftar tersebut sudah diurutkan prioritasnya agar tidak bentrok, maka jika ada nama file program yang sama (hanya berbeda ekstensi) dalam folder yang sama maka yang dijalankan adalah file dengan ekstensi yang ada dibagian paling kiri.
Misal dalam folder C:test ada 3 file, yaitu coba.exe, coba.cmd, dan coba.bat.

Isi dari masing-masing file sebagai berikut:

coba.bat :

@echo off
echo ini adalah file bat

coba.cmd

@echo off
echo ini adalah file cmd

coba.exe (hasil compile dari source code bahasa C)

silakan compile menggunakan compiler favoritmu

#include <stdio.h>

void main() {
    echo “ini adalah file exe”;
}

Buka command prompt dan pindah ke folder C:test dengan perintah cd test , kemudian ketik coba , maka yang dijalankan adalah coba.exe .

Referensi:
http://stackoverflow.com/questions/605101/order-in-which-command-prompt-executes-files-with-the-same-name-a-bat-vs-a-cmd-v