2017-10-05 147 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

相关问题