This command would seem to do what you wish
```none
for file in *.* ; do cp $file ${file//a\./b\.} ; done
```
Adapted from [this answer][1] to [Renaming part of a filename][2]

Actually, you could just do
```none
for file in * ; do cp $file ${file//a\./b\.} ; done
```
Note that the `.` has to be escaped using `\.`. This is primarily because your example is a filename of a single letter, which could conflict with a letter in the extension.

If your filenames are a bit more explicit, such as `doggy.txt`, `doggy.pdf`, `doggy.xls`, etc., and you want to change them to `feline.txt`, etc., then you could do away with escaping the `.`, like so:
```none
for file in *.* ; do cp $file ${file//doggy/feline} ; done
```


  [1]: https://stackoverflow.com/a/17789186/4424636
  [2]: https://stackoverflow.com/q/1392768/4424636