34

我需要使用 Matlab 列出文件夹内的子文件夹。如果我使用

nameFolds = dir(pathFolder), 

我得到...+ 子文件夹名称。然后我必须跑nameFolds(1) = []两次。有没有更好的方法来使用 Matlab 获取子文件夹名称?谢谢。

4

4 回答 4

59

使用输出isdir字段dir来分隔子目录和文件:

d = dir(pathFolder);
isub = [d(:).isdir]; %# returns logical vector
nameFolds = {d(isub).name}';

然后,您可以删除...

nameFolds(ismember(nameFolds,{'.','..'})) = [];

您不应该这样做nameFolds(1:2) = [],因为dir根目录的输出不包含那些点文件夹。至少在 Windows 上。

于 2012-01-05T20:14:10.193 回答
8

这更流畅,而且都是一行:

dirs = regexp(genpath(parentdir),['[^;]*'],'match');

解释: 是一个命令,它在一行文本中genpath()吐出所有子文件夹,用分号分隔。parentdir正则表达式函数regexp()在该字符串中搜索模式并返回选项:'matches' 到模式。在这种情况下,模式是任何不是分号的字符 = `[^;],连续重复一次或多次 = *。所以这将搜索字符串并将所有不是分号的字符分组到单独的输出中 - 在这种情况下是所有子文件夹目录。

于 2013-09-27T19:44:12.220 回答
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};
于 2017-04-11T14:50:00.650 回答
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
于 2017-05-10T13:47:49.800 回答