Mam katalog, który ma 3 foldery. Każdy folder z tych 3 folderów ma inną liczbę folderów. I w każdym folderze tych folderów znajduje się lista plików, które chcę uruchomić kod na każdym z tych plików. Na przykład: to jest tak: MainFolder ma SubFolder1, SubFolder2. SubFolder1 ma SubSubFolder1, SubSubFolder2, SubSubFolder3. SubFolder2 ma SubSubFolder1, SubSubFolder2. Każdy z SunSubFolders ma wiele plików. Chcę skryptu, który daję ścieżce MainFolder i przechodzi przez każdy podfolder i podukład katalogów i wykonuje operacje na plikach w tym podukładu i zapisuje obszar roboczy pod nazwą tego podukładnika. Tak więc w powyższym przykładzie, po wykonaniu pracy nad plikami w SubSubFolder1 wynikowy obszar roboczy zostanie zapisany w lokalizacji o nazwie SubSubFolder1.mat.
Proszę pytam, czy ktoś może mi pomóc, ponieważ jest to dla mnie dość pilne. Wielkie dzięki za życzliwą pomoc i uwagę.
Aktualizacja:
Zrobiłem to, ale pojawił się inny problemkiedy uzyskuję dostęp do plików w SubSubFolders i próbuję wykonać operację, mówi "Plik" [00000000] .pgm "nie można otworzyć, ponieważ: Brak takiego pliku lub katalogu". Jak rozwiązać ten problem?
to jest mój kod:
D = rdir("Hussein/*/*"); %// List of all sub-directories
for k = 1:length(D)
currpath = D(k).name; %// Name of current directory
[pathstr, name, ext] = fileparts(currpath);
%// Operate on all .txt files in currpath
l = dir(fullfile(currpath, "*.pgm")); %// Listing of all relevant files
filenames={l.name}";
nfiles=length(filenames)
%images=zeros(240, 320, 1000);
idx=1;
strtidx=1;
endidx=nfiles;
step=1;
waitbar(0);
for i=strtidx:step:endidx
fn=fullfile("", filenames{i});
tmp=padarray(ut_pgmread(fn), 1, "post");
%figure(1); imagesc(tmp); colormap(jet(4096)); colorbar;
images(:, :, idx)=tmp; idx=idx+1;
waitbar(i/nfiles);
end
close(findall(0,"Tag","TMWWaitbar"));
name="/Volumes/Untitled/work/"+name;
save (name, "-v7.3");
%for m = 1:length(F)
% currfile = F(m).name; %// Name of current file
%// Do something with currfile...
%end
%// Write output (if any) in currpath...
end;
Odpowiedzi:
3 dla odpowiedzi № 1Wygląda na to, że szukasz rekurencyjnej wersji dir
, więc możesz znaleźć ulepszony rdir
narzędzie z MATLAB File Exchange przydatnej do twoich celów. Korzystanie z ulepszonej rdir
Twój kod będzie wyglądał następująco:
%// List all sub-directories under MainFolder recursively
D = rdir("MainFolder***."); %// List of all sub-directories
for k = 1:length(D)
currpath = D(k).name; %// Name of current directory
%// Operate on all .txt files in currpath
F = dir(fullfile(currpath, "*.txt")); %// Listing of all relevant files
for m = 1:length(F)
currfile = F(m).name; %// Name of current file
%// Do something with currfile...
end
%// Write output (if any) in currpath...
end;