matlab 批量修改文件名常见错误

本文讲述了在Matlab中遇到文件读取顺序混乱的问题,通过使用movefile函数实现批量修改文件名,确保按数字顺序读取。作者分享了如何利用str2double转换文件名并加上前导零,以及在处理系统命令和路径问题上的经验。
摘要由CSDN通过智能技术生成

问题

我在使用matlab对删格文件进行计算时,发现由于命名问题,matlab读取文件顺序并不是按照顺序运行,例如,我的文件命名是“1.tif’,‘2.tif’,……‘11.tif’,‘12,tif’。
那么,matlab批量读取的顺序便是’1.tif’,‘10.tif’,‘11.tif’,‘12.tif’,‘2.tif’……‘9.tif‘。
为了解决这个问题,我需要将长度较小的文件前面加一个’0‘,这样,读取顺序会变为:’01.tif’,‘02.tif’……'12.tif’。
批量修改文件名的操作有很多种,在matlab中,常见的方法有:调动系统命令批量修改与使用matlab函数的copyfile 与movefile。
后者方法代码示例如下:

PDF files in the current folder
files = dir('*.pdf');

% Loop through each
for id = 1:length(files)
    % Get the file name (minus the extension)
    [~, f] = fileparts(files(id).name);

      % Convert to number
      num = str2double(f);
      if ~isnan(num)
          % If numeric, rename
          movefile(files(id).name, sprintf('%03d.pdf', num));
      end
end

使用后者的好处是:限制少、语法更简单好写,功能更多(可以移动文件或文件夹)
而且movefile是matlab函数,不会受到系统影响,而如果你使用system命令,在程序移植到其他系统中运行时如果系统命令的用法不同也会运行失败
所以不管从兼容性,还是简洁,功能更强各个方面来说,movefile都是更好的选择。
然而,movefile需要重新选择文件夹或者在同一文件夹中,这会造成文件冗余情况,因此,若要直接对文件名进行修改,需要调动系统命令。

在搜索matlab文件重命名时,你很容易搜到这样的命令:
command = [‘rename’ 32 oldname 32 newname];
status = dos(command);
if status == 0
disp([oldname, ’ 已被重命名为 ‘, newname])
else
disp([oldname, ’ 重命名失败!’])
break;
end
这个命令是针对默认路径下matlab文件名批量修改,而在实际使用中,我们需要使用绝对路径。并且,文件路径中若带有空格,则需改为:
command = [‘RENAME’ 32 ,’"’,oldname,’"’,32 newname];
然而,你会发现在实际使用中,命名没有空格,仍会出现语法出错和命名失败的问题,这就我下面要强调的一点:
打开cmd,输入rename:
在这里插入图片描述
注意上面的格式,path只有在filename1前才有,也就是说,如果你要输入绝对路径,只要在oldname输入即可,newname是不可以包含路径的!!

下面给出我的代码:

year=2005:2014;
path2='D:\data\AI_proj\result\resample\';
for i=1:length(year)
    filepath{i}=strcat(path2,num2str(year(i)),'\');
end
for k=1:length(year)
    e=dir([filepath{k},'*.tif']);
    for i=1:size(e,1)
        oldname=[filepath{k},e(i).name];
        if length(e(i).name)==13;
        newname=['0',e(i).name];%newname 不能带路径!
        status = system(['rename ',oldname,' ', newname]);
        end
    end
end

以上,亲测可行,希望帮到各位,

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值