如何用Matlab批量处理子文件夹中table.txt并在同目录保存结果
批量处理子文件夹中同名文件的解决方案
你可以通过遍历指定目录下的所有子文件夹,对每个子文件夹内的table.txt执行相同处理逻辑,核心是用MATLAB的文件夹遍历函数实现批量操作。修改后的代码如下:
% 替换为你的主目录路径,比如 'D:\your_main_folder' main_dir = '你的主目录路径'; % 获取主目录下的所有子文件夹 sub_folders = dir(main_dir); sub_folders = sub_folders([sub_folders.isdir]); % 筛选出文件夹 % 排除当前目录(.)和上级目录(..) sub_folders = sub_folders(~ismember({sub_folders.name}, {'.', '..'})); % 循环遍历每个子文件夹 for i = 1:length(sub_folders) % 拼接子文件夹的完整路径 folder_path = fullfile(main_dir, sub_folders(i).name); % 检查当前子文件夹中是否存在table.txt table_path = fullfile(folder_path, 'table.txt'); if ~exist(table_path, 'file') fprintf('警告:%s 中未找到table.txt,跳过该文件夹\n', folder_path); continue; end % 读取文件并执行数据处理(和原代码逻辑一致,改用绝对路径) a = readmatrix(table_path); a4 = a(:,4); a4 = a4 - mean(a4); N = 2^(nextpow2(length(a4))); freq = abs(fftshift(fft(a4,N))); t = [0:1e-12:20e-9].'; ts = t(2)-t(1); F = ((-N/2:N/2-1)/N)*(1/ts); fmr = [(F(N/2+1:end)/1e9)' freq(N/2+1:end)]; % 将结果保存到对应子文件夹下的fmr.csv output_path = fullfile(folder_path, 'fmr.csv'); writematrix(fmr, output_path); fprintf('已处理完成:%s\n', folder_path); end
关键说明
- 避免目录切换错误:用
fullfile拼接绝对路径,代替cd操作,防止因目录切换混乱导致的报错 - 有效筛选子文件夹:通过
dir获取目录列表后,排除系统默认的.和..目录,只处理目标子文件夹 - 增加容错机制:加入
exist判断,当某个子文件夹没有table.txt时自动跳过,不中断整个批量处理流程 - 实时跟踪进度:用
fprintf输出处理状态,方便你掌握每个文件夹的处理情况
内容的提问来源于stack exchange,提问作者Sateesh
相关产品推荐
相关产品推荐

