How to check if file name has a certain ending?

In the current folder are some files, which do or don't have a filename extension. I would like to check, whether they already have the filename extension or not and add the extension, if necessary.
How do I check the filename extension?

2 Comments

Do you mean a specific extension?
No, in general, although the extension in my case would be ".mat".

Sign in to comment.

 Accepted Answer

Try this:
myFolder = 'C:\whatever';
if ~isdir(myFolder)
errorMessage = sprintf('Error: The following folder does not exist:\n%s', myFolder);
uiwait(warndlg(errorMessage));
return;
end
% Look for all files and add extension of .m if they are missing extension.
filePattern = fullfile(myFolder, '*.*');
allFiles = dir(filePattern);
for k = 1 : length(allFiles)
baseFileName = allFiles(k).name;
oldFullFileName = fullfile(myFolder, baseFileName);
fprintf(1, 'Now reading %s\n', oldFullFileName);
[folder, baseFileName, extension] = fileparts(baseFileName);
if isempty(extension)
% No extension, so add a .m extension
newBaseFileName = sprintf('%s.m', baseFileName);
newFullFileName = fullfile(myFolder, newBaseFileName);
movefile(oldFullFileName, newFullFileName);
fprintf(1, 'Renamed %s to %s\n', oldFullFileName, newFullFileName);
end
end

More Answers (2)

dpb
dpb on 9 Aug 2014
Edited: dpb on 9 Aug 2014
dNoExt=dir('*.');
Returns all files with no extension in CWD in the dir structure dNoExt. Process as
for i=1:length(dNoExt)
if dNoExt(i).isdir, continue, end % skip directory entries
movefile(dNoExt(i).name,[dNoExt(i).name '.yourextension']);
end
Or, one can cleanup the returned directory entries first before the loop as
dNoExt=dNoExt(~[dNoExt.isdir]); % retain only files in structure

4 Comments

it also returns subfolders
Yeah, that's correct w/ Matlab...I use JPSoft shell with aliases(*) to avoid that so tend to forget. Simple enough to take care of, however, ...
for i=1:length(dNoExt)
if dNoExt(i).isdir, continue, end % skip directory entries
movefile(dNoExt(i).name,[dNoExt(i).name '.yourextension']);
end
(*) The JPSoft command interpreters allow one to write aliases for builtin commands or other programs similarly to aliasing builtin Matlab functions.
C:\> alias dir
*dir /2hzlp /a:-d
C:\> alias ddir
*dir /a:d /hpw
So, if want directories, I use 'ddir', otherwise I'm never bothered by them cluttering up the file list returned. I've often wished TMW had implemented the additional features with dir, especially the attributes. Directories are ok, but the others aren't returned in the structure and altho not often needed, when are it's not particularly convenient. But, as above, having the facility and becoming accustomed to it for so long I occasionally forget not every application "does it right!" :)
Note the simplification of eliminating the directory entries above if still interested...

Sign in to comment.

d=dir('*.*')
e={d.name}'
f=e(~cellfun(@isdir,e))
ii=regexp(f,'\.+','match')
jj=find(cellfun(@isempty ,ii))
g1=f(jj)
g2=strcat(g1,'.ext')
cellfun(@(x,y) movefile(x,y),g1,g2)

1 Comment

I didn't try your code, because the other answers here seem a bit easier to me. But thank you for your answer!

Sign in to comment.

Categories

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!