MATLAB Answers

Can MATLAB create subfolders within subfolders, programmatically?

99 views (last 30 days)
Brad on 29 Nov 2016
Commented: Brad on 30 Nov 2016
I’m attempting to create a file structure using the following code;
% Make the Junk folder the current folder
cd Junk;
% Ask the user for the directory to be created in the Junk folder, and
% then make it
New_Dir = input('Enter directory name of this event: ', 's');
New_Directory = fullfile('C:', 'Documents and Settings', 'bonstott', 'My Documents', 'MATLAB', 'Junk', New_Dir);
% Change the current folder to the New_Directory and create the subfolders
% Assign the ID numbers a name and place them in the selected folders.
Num_IDs = input('Enter the number of IDs: ');
for j = 1:Num_IDs
Sub_Dir_Name = input('Enter ID number: ', 's');
mkdir('Plasma', Sub_Dir_Name);
% create the subfolders within Plasma
cd Plasma;
mkdir('Vs L');
mkdir('Vs O');
With New_Dir = Test and Num_IDs = 1, the following structure is created;
C:\Documents and Settings\bonstott\My Documents\MATLAB\Junk\Test\Plasma\
Vs L
Vs O
But the desired structure is;
C:\Documents and Settings\bonstott\My Documents\MATLAB\Junk\Test\Plasma\1
Vs L
Vs O
Is there a way to create the desired structure, programmatically?

Accepted Answer

Guillaume on 29 Nov 2016
Actually, do not use cd at all. It's a complete waste of time and may cause code to fail since it affects where matlab looks for m files. There is absolutely no point in changing the current directory to create a new directory, since, as you demonstrated yourself, mkdir accepts a parent directory (and if it didn't you could pass the full path of the directory to create anyway).
The root cause of your problem is that the 'VS' directories must be created in the loop, not after, and as subdirectories of the main directory you create in the loop.
New_Directory = fullfile(... %full path of directory. Good way to do it
plasma_dir = fullfile(New_Directory, 'plasma');
Num_IDs = input('Enter the number of IDs: ');
for id = 1 : Num_IDs
iddir = input('Enter ID number: ', 's');
idpath = fullfile(plasma_dir, iddir);
mkdir(idpath); %not even needed, will be created by the next mkdir anyway.
mkdir(idpath, 'Vs L');
mkdir(idpath, 'VS O');
  1 Comment
Brad on 30 Nov 2016
Guillaume, thanks for the inputs. Much cleaner approach on your part.

Sign in to comment.

More Answers (0)

Community Treasure Hunt

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

Start Hunting!