O programa file
examina o conteúdo dos arquivos, mostrando seu tipo real (com erros ocasionais). Se você estiver usando um sistema semelhante ao Unix, provavelmente já o instalou (há um POSIX descrição do mesmo, por exemplo). Para Windows, existe uma porta no GnuWin32 (um pouco antigo, mas melhor que nada).
O programa lista cada nome de arquivo, junto com os tipos. Tudo o que você precisa fazer (com um script seria bom) é procurar por diferenças entre os dois (nome do arquivo versus descrição do seu tipo).
Aqui está um exemplo de saída para ilustrar:
escher03.jpg: JPEG image data, JFIF standard 1.02
snakes.jpg: JPEG image data, JFIF standard 1.01
sphere.gif: GIF image data, version 87a, 1120 x 832
spirals.jpg: JPEG image data, JFIF standard 1.00, comment: "U-Lead Systems, Inc."
square_l.gif: GIF image data, version 87a, 634 x 668
st_peter.gif: GIF image data, version 87a, 640 x 480