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

조회 수: 32 (최근 30일)
Itzik Ben Shabat
Itzik Ben Shabat 2014년 3월 22일
댓글: Image Analyst 2014년 3월 25일
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

채택된 답변

Jan
Jan 2014년 3월 22일
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
Jos (10584)
Jos (10584) 2014년 3월 25일
You can check if the mfile is the current file using MFILENAME, as in,
if ~strcmpi(fullfile(folder, file), mfilename('fullpath'))
...
Image Analyst
Image Analyst 2014년 3월 25일
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().

댓글을 달려면 로그인하십시오.

추가 답변 (4개)

Jakob Sørensen
Jakob Sørensen 2014년 3월 22일
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.

Andy Campbell
Andy Campbell 2014년 3월 24일
편집: Andy Campbell 2014년 3월 24일
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
Itzik Ben Shabat
Itzik Ben Shabat 2014년 3월 25일
thank you. i already implemented what Jan offered but ill look into this as well.

댓글을 달려면 로그인하십시오.


per isakson
per isakson 2014년 3월 22일
편집: per isakson 2014년 3월 22일

Image Analyst
Image Analyst 2014년 3월 22일

카테고리

Help CenterFile Exchange에서 Variables에 대해 자세히 알아보기

Community Treasure Hunt

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

Start Hunting!

Translated by