It is possible to automate Martin Scharrer's routine:
\documentclass{article}
\usepackage{catoptions}
\usepackage{graphicx}
\makeatletter
\def\parsegraphicsfilename#1{%
\begingroup
\def\flname{}\def\flext{}%
\def\updateflname##1{%
\edef\flname{\ifcsnullTF\flname{}{\flname.}##1}%
}%
\ifinsetTF{.}{#1}{%
\def\reserved@a##1.##2\@nil{%
\ifinsetTF{.}{##2}{%
\updateflname{##1}%
\reserved@a##2\@nil
}{%
\updateflname{##1}%
\ifinsetTF{,##2,}{,eps,pdf,png,jpeg,jpg,mps,}{%
\def\flext{##2}%
}{%
\updateflname{##2}%
}%
}%
}%
\reserved@a#1\@nil
\ifcsnullTF\flname{%
\@latex@error{Filename is empty;
\ifcsnullTF\flext{}{ extension '\flext'}}\@ehc
}{%
\edef\flname{\ifcsnullTF\flext{{{\flname}}}{{\flname}.\flext}}%
}%
}{%
\def\flname{#1}%
}%
\postgroupdef\flname\endgroup
}
\robust@def*\newincludegraphics{%
\cpt@testopt\new@includegraphics{}%
}
\def\new@includegraphics[#1]#2{%
\parsegraphicsfilename{#2}%
\includegraphics[#1]{\flname}%
}
\makeatother
Examples
\begin{document}
\def\result{{\tt\detokenize\expandafter{\flname}}\endgraf}
\parsegraphicsfilename{xx}
\result
\parsegraphicsfilename{xx.yy}
\result
\parsegraphicsfilename{xx.yy.pdf}
\result
\parsegraphicsfilename{xx.yy.zz.}
\result
\parsegraphicsfilename{plot_a0.4_b0.6.pdf}
\result
% The next one gives error because there is no filename:
% \parsegraphicsfilename{.pdf}
\end{document}
Real-life application:
\newincludegraphics[scale=1.2,clip]{my..image.file.with..many.dots.ex.pdf}
