You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 06:29:27