MATLAB Answers

0

is there a code to open and run all m files in a folder?

Asked by Itzik Ben Shabat on 22 Mar 2014
Latest activity Commented on by Image Analyst
on 25 Mar 2014
Accepted Answer by Jan
Hi, I have multiple (about 50) different .m files in a folder. I wish to open and run each and every one of them using a matlab script. the output of this script would be a logical vector indicating which files had errors and which did not.
so is there a matlab code/ function that can open, run and check if there were run errors? thanks

  0 Comments

Sign in to comment.

5 Answers

Answer by Jan
on 22 Mar 2014
 Accepted Answer

What about this:
folder = 'C:\YourFolder';
list = dir(fullfile(folder, '*.m');
nFile = length(list);
success = false(1, nFile);
for k = 1:nFile
file = list(k).name;
try
run(fullfile(folder, file));
success(k) = true;
catch
fprintf('failed: %s\n', file);
end
end

  3 Comments

Hi, Great! that did it! a few notes though. this script should not be inside the folder being checked ( got myself to an infinite loop there).
and another question, is there a way to go over the file to see if a certain string appears ? say i want to check all of the file that managed to run if they have the "figure" code.
You can check if the mfile is the current file using MFILENAME, as in,
if ~strcmpi(fullfile(folder, file), mfilename('fullpath'))
...
I don't know what "the figure code" is. Do you mean if the m-file has an associated .fig file? Or do you mean if the word "figure" appears inside the m-file, especially as a statement/function call? Anyway, to see if a certain string appears in another string, you can use strfind().

Sign in to comment.


Answer by Jakob Sørensen on 22 Mar 2014

I don't know if there is a built-in function, but I think you could fairly easy make one yourself. Using the command dir you can acquire all the file names in a folder, then just loop through them, running them one-by-one.

  0 Comments

Sign in to comment.


Answer by Andy Campbell on 24 Mar 2014
Edited by Andy Campbell on 24 Mar 2014

To expand on per's answer, in R2014a you can do this using parameterized tests:
classdef TestAllFiles < matlab.unittest.TestCase
properties(TestParameter)
file = getListOfFiles;
end
methods(Test)
function testFileDoesNotError(testCase, file)
run(fullfile('C:\YourFolder', file));
end
end
end
function files = getListOfFiles
list = dir(fullfile('C:\YourFolder', '*.m'));
files = {list.name};
end
Then you can run them all and get your results:
result = runtests('TestAllFiles')
logicalVector = [result.Passed];

  1 Comment

thank you. i already implemented what Jan offered but ill look into this as well.

Sign in to comment.


Answer by per isakson
on 22 Mar 2014
Edited by per isakson
on 22 Mar 2014

  0 Comments

Sign in to comment.