how to rename a bunch of csv files in a folder

3 次查看(过去 30 天)
Hello,
I have a folder containing several subfolders in which there are bunch of csv files.
I want to rename the csv files in this format. X_Y_subfolder's number_0file's number00. For example, the name of the files in first subfolder and second subfolders should be as following:
Subfolder1) X_Y_1_0100, X_Y_1_0200,...
Subfolder2) X_Y_2_0100, X_Y_2_0200,....
I appreciate any help.
  4 个评论
Jan
Jan 2019-1-7
Did you try to solve the problem by your own at first? Then please post the existing code and ask a specific question.
You need a dir command to obtain a list of subfolders, then a loop over the subfolders and another dir command to get the file names. Then sprintf will create the new file names and movefile renames the files.
Sara
Sara 2019-1-7
Yes. I've tried dir and movefile but I've got error. I did not use sprintf. I will try this command.
Thanks

请先登录,再进行评论。

回答(3 个)

Image Analyst
Image Analyst 2019-1-7
Code is in the FAQ: click here
put a call to movefile() to rename the files.
ALso see attached code to recursivley go through all subfolders.

Image Analyst
Image Analyst 2019-1-7
Another way is to simply use the fileDatastore() function to get a list of all files in all subfolders. In fact, this may be the easiest way, then just loop over the filenames calling movefile().

Sara
Sara 2019-1-7
I rename all files with this code. It is not the best solution nor the professional one, but it works for my case .
Thanks.
S = dir('mymainfolderpath');
a=sum([S(~ismember({S.name},{'.','..'})).isdir]); %%numbers of subfolders
for i = 1:a
n=[(num2str(i))]
cd(fullfile('mymainfolderpath',n)) %% the names of my subfolders are 1,2,...
files=dir('*.csv')
for j = 1:length(files)
name= ['X_Y_',(num2str(i)),'_0',(num2str(j)),'00','.csv']
movefile (files(j).name,name);
end
end
  2 个评论
Stephen23
Stephen23 2019-1-7
It is better to avoid using cd, e.g.
D = 'mymainfolderpath';
S = dir(D);
N = setdiff({S([S.isdir]).name},{'.','..'});
for ii = 1:numel(N)
T = dir(fullfile(D,N{ii},'*.csv'));
for jj = 1:numel(T)
old = fullfile(D,N{ii},T(jj).name);
new = sprintf('X_Y_%d_0%d00.csv',ii,jj);
movefile(old,new)
end
end
Note that with sprintf you can easily change the format of the subfolder/file numbers, e.g. how many digits, leading zeros, etc.
Sara
Sara 2019-1-7
Dear Stephen,
Thanks for your comments. Actually, I am beginner but, whenever I ask a question I learn a lot from the experts.
thanks again for your useful comments

请先登录,再进行评论。

类别

Help CenterFile Exchange 中查找有关 File Operations 的更多信息

产品


版本

R2018a

Community Treasure Hunt

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

Start Hunting!

Translated by