2017-10-05 152 views
1

我想要在Matlab中刪除父文件夾內的所有子文件夾。 我寫了下面的代碼:刪除父文件夾內除特定擴展名以外的所有子文件夾和文件

files=dir; 
for ii = 3:1:size(files,1) 
    if isdir(files(ii).folder) == 1 
     rmdir (files(ii).name) 
    end 
end 

但是,它返回錯誤。第一個文件夾是'.''..'。 如何刪除裏面的每個文件夾? 另外,我寫了下面的代碼從父文件夾的文件每除了刪除Excel文件(XLSX):

delete -except *.xlsx 

不像delvar,旗-except不工作...任何線索呢? 非常感謝。

回答

1

對於檢測和刪除文件夾,我會使用由dir返回的結構的isdir字段。您也可以刪除'.''..'使用ismember不依賴於它們是前兩種一般方法:

dirData = dir(); 

dirList = dirData([dirData.isdir]); 
dirList = dirList(~ismember({dirList.name}, {'.', '..'})); 
for iDir = 1:numel(dirList) 
    rmdir(fullfile(dirList(iDir).folder, dirList(iDir).name)); 
end 

對於刪除的文件,你可以用regexp創建文件的索引沒有一個.xlsx等擴展名,然後delete他們:

fileList = dirData(~[dirData.isdir]); 
deleteIndex = cellfun(@isempty, regexp({fileList.name}, '.xlsx')); 
deleteList = fullfile({fileList(deleteIndex).folder}, {fileList(deleteIndex).name}); 
delete(deleteList{:}); 

注意,我在上面使用fullfile建立使用返回結構的foldername領域的完整路徑,以每個文件dir。這使您可以選擇對文件夾執行操作,而無需將其作爲當前目錄。

+0

謝謝!奇蹟般有效!! – user3641311

+0

我只需要添加''s''到'rmdir(fullfile(dirList(iDir).folder,dirList(iDir).name));否則它不會刪除現有文件夾!非常感謝的人! – user3641311

相關問題