MATLAB中如何将含子文件夹的文件路径与名称存入数组?
嘿,我来帮你搞定这个MATLAB的问题!你之前用dir **/ .报错是因为MATLAB的递归文件查找语法可不是这么写的,咱们一步步来解决:
第一步:正确递归获取所有文件路径到数组
MATLAB里要递归遍历当前文件夹及子文件夹的所有文件,正确的dir命令是用**作为通配符匹配任意层级的子目录,写法如下:
% 获取当前目录及所有子目录的文件/文件夹信息 fileInfo = dir('**/*');
这个命令会返回一个结构体数组,包含每个文件/文件夹的名称、所在路径、是否为目录等信息。但我们需要的是文件的完整路径,所以得过滤掉文件夹:
% 初始化存储文件路径的单元格数组 allFilePaths = {}; allFileNames = {}; for idx = 1:length(fileInfo) % 跳过文件夹(包括当前目录.和上级目录..) if ~fileInfo(idx).isdir % 拼接完整路径 fullPath = fullfile(fileInfo(idx).folder, fileInfo(idx).name); allFilePaths{end+1} = fullPath; allFileNames{end+1} = fileInfo(idx).name; end end
现在allFilePaths就是所有文件的完整路径数组,allFileNames是对应的文件名数组,刚好满足你后续对比的需求。
第二步:对比两个文件夹的文件(以文件名标识)
假设你要对比的两个文件夹分别是FolderOld(旧文件夹)和FolderNew(新文件夹),先分别获取它们的文件名集合:
% 获取旧文件夹的文件名 infoOld = dir(fullfile(FolderOld, '**/*')); namesOld = {infoOld(~[infoOld.isdir]).name}; % 获取新文件夹的文件名 infoNew = dir(fullfile(FolderNew, '**/*')); namesNew = {infoNew(~[infoNew.isdir]).name};
然后用MATLAB的集合函数快速找出新增和删除的文件:
% 新文件夹中新增的文件(旧文件夹没有,新文件夹有的) addedFiles = setdiff(namesNew, namesOld); % 旧文件夹中已删除的文件(旧文件夹有,新文件夹没有的) removedFiles = setdiff(namesOld, namesNew);
如果需要找到这些文件对应的具体路径,可以结合infoOld和infoNew的结构体,通过文件名匹配提取路径。
第三步:更新日志Excel
接下来把新增/删除的文件信息写入Excel日志,推荐用writetable函数(比旧的xlswrite更稳定灵活):
% 创建存储日志的表格 logData = table(... categorical([repmat('新增', length(addedFiles), 1); repmat('删除', length(removedFiles), 1)]), ... [addedFiles; removedFiles], ... 'VariableNames', {'操作类型', '文件名'}); % 写入Excel文件:如果文件不存在则新建,存在则追加数据 writetable(logData, '文件更新日志.xlsx', 'WriteMode', 'append');
如果需要更详细的日志(比如文件路径、修改时间),可以从infoOld/infoNew中提取folder、date等字段,加入到表格里。
内容的提问来源于stack exchange,提问作者baozai
相关产品推荐
相关产品推荐

