34

Matlabを使用してフォルダー内のサブフォルダーを一覧表示する必要があります。使用する場合

nameFolds = dir(pathFolder), 

+サブフォルダー名を取得.します。..その後、nameFolds(1) = []2回実行する必要があります。Matlabを使用してsubFolder名を取得するためのより良い方法はありますか?ありがとう。

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

これは非常に滑らかで、すべて1行です。

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

説明: セミコロンで区切られた1行のテキストでgenpath()のすべてのサブフォルダーを吐き出すコマンドです。parentdir正規表現関数regexp()は、その文字列内のパターンを検索し、オプション「matches」をパターンに返します。この場合、パターンはセミコロン= `[^;]ではなく、1行に1回以上繰り返される任意の文字=*です。したがって、これは文字列を検索し、セミコロンではないすべての文字を個別の出力(この場合はすべてのサブフォルダーディレクトリ)にグループ化します。

于 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 に答える