Copy file to a new folder

Under a folder, I have a lot of .mat. "19800101.mat", "19800102.mat", ......."19800201.mat", "19800202.mat", ......"19801201.mat".... I want to copy "19800101.mat", "19800102.mat", and copy others which also belong to January to a new folder, and display this new folder directory. February to a another new folder, and so on. Thanks.

 Risposta accettata

destdirs = {'January', 'February', 'March', ... 'December'};
ndests = length(destdirs);
for K = 1 : ndests
if ~exist(destdirs{K}, 'dir'); mkdir(destdirs{K}); end
end
dinfo = dir('*.mat');
filenames = {dinfo.name};
%remove filenames that are not a 4 digit year followed by a 2 digit month followed by a
%2 digit day followed by .mat. Years starting in 0, 1, or 2 are accepted with this check
namebad = cellfun(@isempty, regexp(filenames, '[012]\d\d\d[01]\d\d\d\.mat$') );
filenames(namebad) = [];
nfiles = length(filenames);
for K = 1 : nfiles
thisfile = filenames{K};
monthnum = sscanf(thisfile, '%*4d%2d', 1);
if monthnum > ndests
fprintf('File has invalid month number, skipping "%s"\n', thisfile);
else
destdir = destdirs{monthnum};
copyfile( thisfile, destdir );
end
end

4 Commenti

You are genius.
But if all my .mat is not in current directory, e.g, they are in 'C:\Program Files\MATLAB\R2015b\bin\data'
How do I change following code?
"dinfo = dir('*.mat');"
I change to following one, but not working.
dinfo = dir('C:\Program Files\MATLAB\R2015b\bin\data\*.mat');
projectdir = 'C:\Program Files\MATLAB\R2015b\bin\data';
destdirs = {'January', 'February', 'March', ... 'December'};
ndests = length(destdirs);
for K = 1 : ndests
if ~exist(destdirs{K}, 'dir'); mkdir(destdirs{K}); end
end
dinfo = dir( fullfile(projectdir, '*.mat') );
filenames = {dinfo.name};
%remove filenames that are not a 4 digit year followed by a 2 digit month followed by a
%2 digit day followed by .mat. Years starting in 0, 1, or 2 are accepted with this check
namebad = cellfun(@isempty, regexp(filenames, '[012]\d\d\d[01]\d\d\d\.mat$') );
filenames(namebad) = [];
nfiles = length(filenames);
for K = 1 : nfiles
thisfile = filenames{K};
monthnum = sscanf(thisfile, '%*4d%2d', 1);
if monthnum > ndests
fprintf('File has invalid month number, skipping "%s"\n', thisfile);
else
destdir = destdirs{monthnum};
copyfile( fullfile(projectdir, thisfile), destdir );
end
end
Jason
Jason il 8 Mar 2016
Thank you so so so much. It works for me now.
Please click to Accept the answer.

Accedi per commentare.

Più risposte (2)

John BG
John BG il 8 Mar 2016
Modificato: John BG il 8 Mar 2016
Hi Jason
one way to copy files is with command dos
path1='put here full destination path' % for instance D:\Documents\backup\'
dos('copy file_name.mat path1')
If you find this answer of any help solving your question, please click on the thumbs-up vote link,
thanks in advance
John

2 Commenti

Jason
Jason il 8 Mar 2016
Thanks. But I do not think your code cannot work.
MAtlab's copyfile is more direct and faster than starting a DOS command. If there is really a reason to call DOS, use:
dos(['copy file_name.mat ', path1])

Accedi per commentare.

Prajwol Tamrakar
Prajwol Tamrakar il 27 Mag 2020

0 voti

This issue of copying file to another directory is possibly due to "ready only access". Use 'f' option to override the read-only status of the destination folder.
copyfile(SourceFile, DestinyFile, 'f')

Categorie

Scopri di più su Creating, Deleting, and Querying Graphics Objects in Centro assistenza e File Exchange

Tag

Community Treasure Hunt

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

Start Hunting!

Translated by