Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在MATLAB中批量重命名文件_Matlab_File_Concatenation_Renaming - Fatal编程技术网

在MATLAB中批量重命名文件

在MATLAB中批量重命名文件,matlab,file,concatenation,renaming,Matlab,File,Concatenation,Renaming,在收集数据时,我当前以以下格式命名了我的文件: 1_10.mat 下划线前的数字是一个大陆: 1- Africa 2- South America 3- Central America 第二个数字是在该大陆进行测量的日子。我想做的是在文件名的末尾加上测量的国家。例如: 1\u 1-->1\u 10我想把每一个都重命名为1\u 1\u扎伊尔-->1\u 10\u扎伊尔 1_11-->1_14,我想将每一个都重命名为1_11_肯尼亚-->1_11_肯尼亚 如何在将所有.mat文件保存在同一文件夹

在收集数据时,我当前以以下格式命名了我的文件:

1_10.mat
下划线前的数字是一个大陆:

1- Africa
2- South America
3- Central America
第二个数字是在该大陆进行测量的日子。我想做的是在文件名的末尾加上测量的国家。例如:

1\u 1-->1\u 10
我想把每一个都重命名为
1\u 1\u扎伊尔-->1\u 10\u扎伊尔

1_11-->1_14
,我想将每一个都重命名为
1_11_肯尼亚-->1_11_肯尼亚

如何在将所有.mat文件保存在同一文件夹中的同时执行此操作?如果可能的话,我更愿意使用MATLAB进行重命名

我知道算法如下所示:

  • 命名包含所有.mat文件的目录
  • 从绑定1到绑定x创建for循环
  • 连接我想要的短语
  • 唯一的问题是,我不知道如何获得循环的长度,也不知道MATLAB如何读取目录中的文件

    这就是我尝试过的

    directory = 'C:\place';
    for 1 : 9
        curName = directory.name;
        s = '_Africa';
        laterName = (strcat(directory,s)).name;
    end
    

    像这样的事情应该让你开始:

    directory = 'C:\place\';
    
    % Filter the list of files using * as a wildcard.
    file = strcat(directory, '*.mat');
    
    % Get a list of files and concatenate them with the directory name.
    results = dir(file);
    
    file_name = strcat(directory, '\', num2cell(char(results.name), 2)')';
    
    % The total number of files
    nfile = length(file_name)
    
    % Loop through each file.
    for i = 1: nfile
        curName = file_name{i}
        d = textscan(curName, '%3s%f%1s%f');
        if (d{2} == 1)
            if (1 <= d{4} && d{4} <= 10)
                laterName = sprintf('.\\%i_%i_Zaire.mat', d{2}, d{4})
            elseif  (11 <= d{4} && d{4} <= 14)
                laterName = sprintf('.\\%i_%i_Kenya.mat', d{2}, d{4})
            end
        else
            % ...
        end
    end
    
    directory='C:\place\';
    %使用*作为通配符筛选文件列表。
    file=strcat(目录'*.mat');
    %获取文件列表并将其与目录名连接。
    结果=目录(文件);
    文件名=strcat(目录“\”,num2单元格(char(results.name),2)”;
    %文件总数
    nfile=长度(文件名)
    %循环浏览每个文件。
    对于i=1:n文件
    curName=文件名{i}
    d=文本扫描(curName,'%3s%f%1s%f');
    如果(d{2}==1)
    
    如果(1)你根本不说你已经试过了什么。如果你不明白Matlab是如何读取文件的,试着搜索他们的文档。我已经编辑了这个问题。我遇到的一个问题是,它会在1_1之后直接排序1_10,或者在1_2之后排序1_20。首选格式是在下划线之后按递增顺序排序,如h作为1_1,1_2…1_9,1_10,1_10…1_19,1_20,1_21我认为顺序不重要。你可以按顺序循环,然后读取旧文件名中的数字并适当重命名。请参阅我编辑过的答案。谢谢你的反馈,很抱歉打扰你,但我也注意到%3s术语实际上会从e全名包括目录,例如“c:\”我对Matlab不太了解,无法真正回答您的问题,但就我个人而言,我会使用Excel和VBA来完成这类工作。请看这个--