Se você está confortável com uma solução de linha de comando, você poderia fazer algo assim, no bash
i=1
for file in *.*; do
printf -v newfile "%03d.%s" $((i++)) ${file##*.}
echo mv -v -- "$file" "$newfile"
done
O echo
impedirá que ele realmente faça quaisquer alterações (ele apenas exibirá uma lista de comandos mv
que ele faria) - você pode realmente fazer as alterações executando o mesmo comando sem o echo
uma vez você está satisfeito que vai fazer o que quiser.