对于一个文件夹中的多个doc文件进行批量改名,下图中是笔者从学生那里收上来的记录表,说了要统一命名也没人听,我又懒得一个个改,只好费点时间编程了。
两种实现的思路,一是从旧文件名中选取特定位置的字符,组成新的文件名,要求文件名有固定的位置,比较有局限性。二是从提前做好的列表中选取文件名,适用性较强。
第一种思路
如下图所示,原来的文件名是乱七八糟的,唯一的共同之处是最前面是导师的名字,但是也有3个字和2个字的两种,要将两种文件分开处理,分到两个文件夹里。以3个字的名字为例进行说明。
首先是获取现有的文件信息(主要是文件名),有两种方法可以实现,大同小异,各有要求,难以取舍,索性都放在这了。以下代码实现的是对3个字的名字对应的文件信息的读取。
%% 获取文件信息方法1,前提是路径path中的.doc文件全是待处理的
Path = 'E:\电脑文件\2编程matlab\数据处理程序\批量处理doc文件\doc\3'; % 设置数据存放的文件夹路径
cd(Path); %把当前工作目录切换到指定文件夹
File = dir(fullfile(Path,'*.docx')); % 显示文件夹下所有符合后缀名的文件的完整信息
oldname = {File.name}'; % 提取符合后缀名的所有文件的文件名,转换为n行1列
n = size(oldname,1); % 文件个数
%% 获取文件信息方法2,前提是文件夹里只有你需要的文件
folder=dir('E:\电脑文件\2编程matlab\数据处理程序\批量处理doc文件\doc\3');
n = length(folder)-2;% 文件个数
oldname=cell(n,1);% 空的元胞数组,放oldname
for ii=3:length(folder)
oldname{ii-2}=folder(ii).name;
end
然后是对以上文件的批量改名
%% 批量命名前几个字
newname=cell(n,1);% 空的元胞数组,放oldname
for i =1:n
newname{i} = [oldname{i}(1:3),'导师组2019级seminar研讨活动记录表',oldname{i}(end-4:end)];%1:3是名字,中间是加的字,最后是.doc后缀
movefile(oldname{i},newname{i});%将oldname替换为newname
end
第二种思路
因为所有的文件都有对应的excel名单,为了防止导师名字不在最开始的位置(但是文件名里必须得有),采用以下方法
首先还是读取文件名
%% 获取文件信息方法1,前提是路径path中的.doc文件全是待处理的
Path = 'E:\电脑文件\2编程matlab\数据处理程序\批量处理doc文件\doc'; % 设置数据存放的文件夹路径
cd(Path); %把当前工作目录切换到指定文件夹
File = dir(fullfile(Path,'*.docx')); % 显示文件夹下所有符合后缀名的文件的完整信息
oldname = {File.name}'; % 提取符合后缀名的所有文件的文件名,转换为n行1列
n = size(oldname,1); % 文件个数
然后读取名单信息,与上面的oldname进行对比,然后替换名字。
% 读取newname
newname = readcell('E:\电脑文件\2编程matlab\数据处理程序\批量处理doc文件\doc\newname.xlsx','sheet','sheet1');%读取工作簿
新旧名字对比,如果oldname中包含newname,就将oldname替换成对应的newname,可以进行较为灵活的操作。
%% 通过包含关系,用新的名称替换对应的旧名称,即旧名称包含新名称
for i = 1:length(newname)
for j = 1:length(oldname)
if findstr(oldname{i},newname{j})%在长串中搜索短串
movefile(oldname{i},[newname{j},'导师组2019级seminar研讨活动记录表.docx']);% 用后者替换前者
end
end
end