2012-01-05 13 views

Odpowiedz

48

Zastosowanie isdir pole dir wyjście oddzielić podkatalogi i pliki:

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

Następnie można usunąć . i ..

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

Nie należy zrobić nameFolds(1:2) = [], ponieważ dir wyjściu z katalogu nie zawiera tych folderów-kropek. Przynajmniej w systemie Windows.

7

To znacznie płaszcz i wszystko jedna linia:

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

Poradnik: genpath() jest polecenie, które wypluwa wszystkie podfoldery parentdir w pojedynczej linii tekstu, oddzielone średnikami. Funkcja wyrażeń regularnych szuka wzorców w tym łańcuchu i zwraca opcję: "dopasowuje" do wzorca. W tym przypadku wzorzec jest dowolnym znakiem, a nie średnikiem = `[^;], powtórzonym jeden lub więcej razy z rzędu = *. Przeszuka ciąg znaków i zgrupuje wszystkie znaki, które nie są średnikami, w osobne wyjścia - w tym przypadku wszystkie katalogi podfolderów.

+2

list Polecenie folderze głównym, jak również podfoldery - To nie to, co pytający chciał. – ioanwigmore

+1

Ta odpowiedź pomogła mi szybko wyświetlić wszystkie podkatalogi. Dzięki. – axs

+1

Bardzo ładne rozwiązanie! Ale musisz pamiętać, że funkcja 'genpath' służy do generowania ścieżki wyszukiwania, więc pomija niektóre określone foldery. Zobacz [doc] (http://www.mathworks.com/help/matlab/ref/genpath.html). – yuk

0

Poniższy fragment kodu po prostu zwraca nazwę podfolderów.

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

I skutecznie ponowne pierwsze rozwiązanie przewidziane w inny scenariusz na Zrobiłem funkcję z niego:

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 
Powiązane problemy