How do I create a new folder each time I run a code?
이전 댓글 표시
I want to make a new folder each time I run my code.
Example:
If there is a folder named 'newFolder', then generate newFolder1 after running once.
If there is a folder named 'newFolder7', then generate newFolder8 after running once.
In general, if there is a folder named 'newFolderx', then generate newFolderx+1 after running once.
I am using this code below: (important part is the nextname fumction usage)
mkdir("C:/Users/vaidy/Desktop/JAY/Labwork/Models for devices/FeFETIMT model/MATLAB code/Voltage source/25x25/" + nextname('newFolder','1')).
mkdir("C:/Users/vaidy/Desktop/JAY/Labwork/Models for devices/FeFETIMT model/MATLAB code/Voltage source/25x25/" + nextname('newFolder','1')).
But this generates a new folder only for the first time, and later it says that the folder already exists.
댓글 수: 3
Walter Roberson
2019년 12월 16일
What is the code for nextname() ?
Jay Vaidya
2019년 12월 16일
편집: Stephen23
2019년 12월 16일
Jay Vaidya
2019년 12월 16일
채택된 답변
추가 답변 (2개)
Bjorn Gustavsson
2019년 12월 16일
This is easily solved:
dirname = fullfile(path_2_root_dir,sprintf('NewFolder-%s',datestr(now,'yyyymmdd-HHMMSS')));
mkdir(dirname)
Gives you an easy enough time to separate directories, with the added bonus that you explicitly have the create-time in the name, and this will give you unique numbers that sort nicely.
HTH
댓글 수: 5
Jay Vaidya
2019년 12월 19일
Bjorn Gustavsson
2019년 12월 19일
Yes, I know. And you still go for a cludgy solution where you will have to take extra steps to zero-pad the ID-numbers? (Which we all know is at best a temporary solution because we'll run into the case where we will generate just enough names to fill up the available space plus a few extra...)
"And you still go for a cludgy solution where you will have to take extra steps to zero-pad the ID-numbers?"
Ouch, that hurt... but wait, what is that in the nextname documentation: it states that leading zeros can be specified quite simply in the suffix, for example if you want four digits:
nextname(fullfile(D,'newFolder'),'0001')
% ^^^^ specifies four digits!
The number will be padded with zeros to ensure that it has atleast as many digits as requested.
Unless of course you really consider adding a few leading zeros to the suffix as painfully difficult "extra steps", a bit like reading documentation...
Bjorn Gustavsson
2019년 12월 19일
Yes. Let me ask how many until the problem I pointed out occurs?
Walter Roberson
2019년 12월 19일
?? There are no ID-numbers mentioned in the original question. Also, the original author specifically indicated that the second folder was to be newFolder1 -- not, for example, newFolder0001 so padding with zeros is not desired by the original poster (and not necessary for Stephen's FEX contribution.)
Image Analyst
2019년 12월 19일
편집: Image Analyst
2019년 12월 19일
Here's another way:
parentFolder = pwd; % Wherever you want
prefix = 'newFolder'; % Whatever you want.
baseFolderName = sprintf('%s1', prefix);
newFolder = fullfile(parentFolder, baseFolderName);
maxIterations = 5000; % Whatever. However many times you want to try before giving up.
counter = 1;
while isfolder(newFolder) && counter <= maxIterations
baseFolderName = sprintf('%s%d', prefix, counter); % Can use %3.3d if you want leading zeros.
newFolder = fullfile(parentFolder, baseFolderName);
counter = counter + 1;
end
if counter >= maxIterations
% Could not find a suitable folder name. Alert the user.
message = sprintf('Could not find a folder name after trying %d times', maxIterations);
uiwait(errordlg(message));
else
% Found a good name so make the folder.
mkdir(newFolder);
end
카테고리
도움말 센터 및 File Exchange에서 MATLAB에 대해 자세히 알아보기
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!