MATLAB R2020b如何用uigetfile/uigetdir批量选取多文件夹下指定类型文件
解决MATLAB R2020b跨子文件夹批量选取.mat文件的问题
方法一:通过uigetdir+递归搜索(推荐,适合批量处理)
uigetdir本身不能直接选文件,但可以先用来指定父目录,再结合MATLAB的递归文件搜索功能一次性获取所有子文件夹里的.mat文件,步骤如下:
- 选择目标父目录
parentDir = uigetdir('请选择包含子文件夹的父目录'); if parentDir == 0 return; % 用户取消选择,直接退出 end
- 递归搜索所有子文件夹中的.mat文件
MATLAB R2016b及以后版本支持**通配符实现递归搜索,你的R2020b完全适配:
% 搜索父目录下所有层级子文件夹中的.mat文件 matFilesInfo = dir(fullfile(parentDir, '**', '*.mat'));
- 提取所有文件的完整路径
% 拼接文件夹路径和文件名,得到每个文件的完整路径 fileFullPaths = fullfile({matFilesInfo.folder}, {matFilesInfo.name});
现在fileFullPaths就是所有分散在子文件夹中的.mat文件路径列表,直接循环这个列表就能批量处理文件了。
方法二:循环调用uigetfile手动选择(适合需手动筛选的场景)
如果不想一次性获取所有文件,而是需要手动挑选不同文件夹里的目标文件,可以循环调用uigetfile,让用户多次选择不同目录下的文件:
selectedFilePaths = {}; while true % 弹出文件选择窗口,支持多选 [selectedFiles, selectedDir] = uigetfile(... '*.mat', ... '选择.mat文件(可多选,点击取消结束选择)', ... 'MultiSelect', 'on'); if selectedFiles == 0 break; % 用户取消选择,结束循环 end % 处理单选和多选的情况 if ischar(selectedFiles) selectedFiles = {selectedFiles}; end % 拼接完整路径并添加到列表 fullPaths = fullfile(selectedDir, selectedFiles); selectedFilePaths = [selectedFilePaths, fullPaths]; end
这个方法需要你手动逐个打开不同文件夹选文件,适合文件数量不多或需要精准筛选的情况,但几百个文件的话更推荐方法一。
内容的提问来源于stack exchange,提问作者AmericanJael
相关产品推荐
相关产品推荐

