This should work for you:
for file in [0-9]*.txt; do
mv "$file" $(printf %04d.%s ${file%.*} ${file##*.})
done
Test:
$ touch 1.txt 2.txt 3.txt
$ ls
1.txt 2.txt 3.txt
$ for file in [0-9]*.txt; do
mv "$file" $(printf %04d.%s ${file%.*} ${file##*.})
done
$ ls
0001.txt 0002.txt 0003.txt