Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
List 列出文件夹-Matlab中的子文件夹(仅子文件夹,而不是文件)_List_Matlab_Directory_Dir - Fatal编程技术网

List 列出文件夹-Matlab中的子文件夹(仅子文件夹,而不是文件)

List 列出文件夹-Matlab中的子文件夹(仅子文件夹,而不是文件),list,matlab,directory,dir,List,Matlab,Directory,Dir,我需要使用Matlab列出文件夹中的子文件夹。如果我使用 nameFolds = dir(pathFolder), 我得到和。+子文件夹名称。然后我必须运行两次nameFolds(1)=[]。是否有更好的方法使用Matlab获取子文件夹名称?谢谢。使用dir字段的isdir输出到单独的子目录和文件: d = dir(pathFolder); isub = [d(:).isdir]; %# returns logical vector nameFolds = {d(isub).name}';

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

nameFolds = dir(pathFolder), 

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

使用
dir
字段的
isdir
输出到单独的子目录和文件:

d = dir(pathFolder);
isub = [d(:).isdir]; %# returns logical vector
nameFolds = {d(isub).name}';
然后可以删除

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

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

这是一条更加流畅的线条:

dirs = regexp(genpath(parentdir),['[^;]*'],'match');
解释:
genpath()
是一个命令,它在一行文本中以分号分隔出
parentdir
的所有子文件夹。正则表达式函数
regexp()。在这种情况下,模式是任何字符,而不是分号=`[^;],在一行=*中重复一次或多次。因此,这将搜索字符串并将所有非分号的字符分组到单独的输出中—在本例中为所有子文件夹目录。

以下代码片段仅返回子文件夹的名称

% `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};

为了有效地重用在不同场景中提供的第一个解决方案,我利用它制作了一个函数:

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

这个命令列出主文件夹和子文件夹——这不是询问者想要的。这个答案帮助我快速列出所有子目录。谢谢。非常好的解决方案!但您需要记住,
genpath
函数用于生成搜索路径,因此它跳过了一些特定的文件夹。请参阅。此外,您需要使用pathsep而不是硬编码分号,因为unix上的路径分隔符与windows上的不同。如果您希望包括所有隐藏的子目录(例如,如果您使用
git
),则可以使用
startsWith(nameFolds,'.')
而不是
ismember(nameFolds,{.'.'..})