我有一个包含3个文件夹的目录。这3个文件夹中的每个文件夹都有另外数量的文件夹。在这些文件夹的每个文件夹中都有一个文件列表,我想在每个文件上运行代码。例如: 就像这样: MainFolder有SubFolder1,SubFolder2。 SubFolder1有SubSubFolder1,SubSubFolder2,SubSubFolder3。 SubFolder2有SubSubFolder1,SubSubFolder2。 每个SunSubFolders都有许多文件。 我想要一个脚本,我给它MainFolder路径,它遍历每个子文件夹和子子文件夹,并对此子文件夹中的文件执行操作,并通过此子文件夹的名称保存工作区。因此,在上面的示例中,在对SubSubFolder1中的文件进行一些处理之后,生成的工作空间将保存在名为SubSubFolder1.mat的位置。
请问我是否有人可以帮助我,因为这对我来说非常紧急。 非常感谢您的帮助和考虑。
更新
我已经完成了,但另一个问题出现了,当我访问SubSubFolders中的文件并尝试进行操作时,它说“文件'[00000000] .pgm”无法打开,因为:没有这样的文件或目录”。 如何解决这个问题?
这是我的代码:
D = rdir('Hussein/*/*'); %// List of all sub-directories
for k = 1:length(D)
currpath = D(k).name; %// Name of current directory
[pathstr, name, ext] = fileparts(currpath);
%// Operate on all .txt files in currpath
l = dir(fullfile(currpath, '*.pgm')); %// Listing of all relevant files
filenames={l.name}';
nfiles=length(filenames)
%images=zeros(240, 320, 1000);
idx=1;
strtidx=1;
endidx=nfiles;
step=1;
waitbar(0);
for i=strtidx:step:endidx
fn=fullfile('', filenames{i});
tmp=padarray(ut_pgmread(fn), 1, 'post');
%figure(1); imagesc(tmp); colormap(jet(4096)); colorbar;
images(:, :, idx)=tmp; idx=idx+1;
waitbar(i/nfiles);
end
close(findall(0,'Tag','TMWWaitbar'));
name='/Volumes/Untitled/work/'+name;
save (name, '-v7.3');
%for m = 1:length(F)
% currfile = F(m).name; %// Name of current file
%// Do something with currfile...
%end
%// Write output (if any) in currpath...
end;
答案 0 :(得分:3)
您似乎正在寻找dir
的递归版本,因此您可能会发现MATLAB文件交换中的enhanced rdir
tool对您有用。使用增强的rdir
,您的代码将沿着这些方向显示:
%// List all sub-directories under MainFolder recursively
D = rdir('MainFolder\**\*.'); %// List of all sub-directories
for k = 1:length(D)
currpath = D(k).name; %// Name of current directory
%// Operate on all .txt files in currpath
F = dir(fullfile(currpath, '*.txt')); %// Listing of all relevant files
for m = 1:length(F)
currfile = F(m).name; %// Name of current file
%// Do something with currfile...
end
%// Write output (if any) in currpath...
end;