我需要使用Matlab列出文件夹中的子文件夹。如果我使用
nameFolds = dir(pathFolder),
我得到.
和..
+子文件夹名称。然后,我必须运行nameFolds(1) = []
两次。有没有更好的方法来使用Matlab获取subFolder名称?感谢。
答案 0 :(得分:55)
使用isdir
输出的dir
字段分隔子目录和文件:
d = dir(pathFolder);
isub = [d(:).isdir]; %# returns logical vector
nameFolds = {d(isub).name}';
然后,您可以删除.
和..
nameFolds(ismember(nameFolds,{'.','..'})) = [];
您不应该nameFolds(1:2) = []
,因为根目录的dir
输出不包含这些点文件夹。至少在Windows上。
答案 1 :(得分:8)
这一点非常流畅,只有一行:
dirs = regexp(genpath(parentdir),['[^;]*'],'match');
说明:
genpath()
是一个命令,它在一行文本中将parentdir
的所有子文件夹吐出,用分号分隔。正则表达式函数regexp()
搜索该字符串中的模式,并返回选项:'matches'到模式。在这种情况下,模式是任何不是分号=“[^;]的字符,在一行中重复一次或多次= *。因此,这将搜索字符串并将所有不是分号的字符分组到单独的输出中 - 在本例中为所有子文件夹目录。
答案 2 :(得分:1)
以下代码段仅返回子文件夹的名称。
% `rootDir` is given
dirs = dir(rootDir);
% remove `.` and `..`
dirs(1:2) = [];
% select just directories not files
dirs = dirs([obj.dirs.isdir]);
% select name of directories
dirs = {dirs.name};
答案 3 :(得分:0)
为了有效地重用不同场景中提供的第一个解决方案,我从中创建了一个函数:
function [ dirList ] = get_directory_names( dir_name )
%get_directory_names; this function outputs a cell with directory names (as
%strings), given a certain dir name (string)
%from: http://stackoverflow.com/questions/8748976/list-the-subfolders-
%in-a-folder-matlab-only-subfolders-not-files
dd = dir(dir_name);
isub = [dd(:).isdir]; %# returns logical vector
dirList = {dd(isub).name}';
dirList(ismember(dirList,{'.','..'})) = [];
end