how to create a new folder mkdir, but naming that folder as input before running the code

95 visualizzazioni (ultimi 30 giorni)
Hi all,
I am not sure if the title is clear. Basically, every time I will run the code, I want a new folder to save my m.files and figures.
That new folder, should be called as the project name that I chose, for example "set_one". This should be easily changed at the beginning of the code, and not to be changed manually from all the related commands every time I change the data sets.
an example
fname = 'set_one'; % this should be the proyect title
Image data = [12.7 5.02 -98 63.9 0 -.2 56];
mkdir('C:\Users\Desktop\matlab results\',fname);
filename=('C:\Users\Desktop\matlab results\fname\Image_Data');
save(filename,'Image_Data')
..And it does not work. mkdir does create a new folder as set_one, but is not able to recognize the new folder as set_one. Therefore, error message says that the folder does not exist.
What I am trying to do is that on the filename line, where it says fname, should be rewritten dynamically by the name I give to fname.
Thanks in advance,
Regards

Risposta accettata

Stephen23
Stephen23 il 24 Apr 2018
Modificato: Stephen23 il 24 Apr 2018
The problem is that where you tried to access the new folder names you referred to the variable name, rather than to the value of that variable:
filename=('C:\Users\Desktop\matlab results\fname\Image_Data');
^^^^^^ this refers to a directory named 'fname'!
When you put fname into that char vector, then that is what MATLAB tells the OS to look for: a folder literally named 'fname' which should be inside the folder 'matlab results'.
Do you have such a directory?
Clearly not.
Is that the name of the directory that you are looking for?
Clearly not.
Instead of looking for a folder literally named 'fname', you need to use the value of the variable fname (not the name of the variable). I also recommend that you use fullfile, which makes joining folder names together easier:
pname = 'C:\Users\Desktop\matlab results';
dname = 'set_one';
mkdir(fullfile(pname,dname))
Image data = [12.7 5.02 -98 63.9 0 -.2 56];
filename = fullfile(pname,dname,'Image_Data.mat');
save(filename,'Image_Data')
  1 Commento
ARP
ARP il 24 Apr 2018
That is exactly what I needed. Many thanks!
I am still learning and I am not familiar with all the possible commands. Thanks for your time

Accedi per commentare.

Più risposte (1)

Peyman Obeidy
Peyman Obeidy il 24 Apr 2018
not quite sure what you want to do, but try this
clear
clc
path =[pwd '\'];
stru =dir( fullfile(path, '*.vsi') );
fileNames = { stru.name };
outputPath = [path 'NewImage2\'];
mkdir(outputPath);
for iFile = 1: numel(fileNames)
fileName=fileNames{iFile}; % read the file name here
numofName=str2double(fileName(7:end-4)); % cut out all but the number
newFileNum=numofName;
newName = fullfile([outputPath 'Image_' , sprintf('%02d.vsi', newFileNum)] );
copyfile(fullfile(path, fileNames{iFile}), newName );
end
  3 Commenti
Peyman Obeidy
Peyman Obeidy il 24 Apr 2018

do you want your code to ask you the name? something like;

prompt = {'Enter a name of the folader'};
title = 'Folder name';
definput = {'Set_one'};
opts.Interpreter = 'tex';
answer = inputdlg(prompt,title,[1 40],definput,opts);
ARP
ARP il 24 Apr 2018

that would be useful yes, but the problem is that matlab does not recognize the new folder name. For instance,

fname = 'set_one' ; % the folder that I want to save the data, which does not exist. 
mkdir('C:\Users\Desktop\matlab results\',fname); % create that folder

Running as it is, a new folder "set_one" is created.

problem:

When saving a variable, now I tell it to go to the new folder given by fname, that is "set_one" in this case

filename=('C:\Users\Desktop\matlab results\fname\Image_Data');
save(filename,'Image_data')
Cannot create 'Image_Data.mat' because 'C:\Users\Desktop\matlab results\fname' does not exist.
Error (line 9)
save(filename,'Image_data')

To fix the error, I should write the command as (see set_one instead of fname)

filename=('C:\Users\Desktop\matlab results\set_one\Image_Data');
save(filename,'Image_data')

But that is not the way to go, since I will have to change manually every time the folder name, and its linked commands.

Why matlab does not understand that fname == set_one?

Accedi per commentare.

Categorie

Scopri di più su Filename Construction in Help Center 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