Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/15.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如何将文件名从1_x_10_a.jpg更改为01_x_010_a.jpg_Matlab_File Rename - Fatal编程技术网

Matlab如何将文件名从1_x_10_a.jpg更改为01_x_010_a.jpg

Matlab如何将文件名从1_x_10_a.jpg更改为01_x_010_a.jpg,matlab,file-rename,Matlab,File Rename,我有很多文件名为: 1_x_0_a.jpg, 1_x_0_b.jpg, 1_x_5_a.jpg ... 15_x_160_a.jpg, 15_x_160_b.jpg, 15_x_165_a.jpg 我想更改文件名,如下所示: 01_x_000_a.jpg, 01_x_000_b.jpg, 01_x_005_a.jpg 因此,x之前应该是一个2位数的数字,x之后应该是3位数的数字。这里有一些步骤可以帮助您: 使用dir获取文件名列表 使用regexprep将起始数字替换为前导零 使用reg

我有很多文件名为:

1_x_0_a.jpg, 1_x_0_b.jpg, 1_x_5_a.jpg ... 15_x_160_a.jpg, 15_x_160_b.jpg, 15_x_165_a.jpg
我想更改文件名,如下所示:

01_x_000_a.jpg, 01_x_000_b.jpg, 01_x_005_a.jpg  

因此,x之前应该是一个2位数的数字,x之后应该是3位数的数字。

这里有一些步骤可以帮助您:

  • 使用
    dir
    获取文件名列表
  • 使用
    regexprep
    将起始数字替换为前导零
  • 使用
    regexprep
    将中间数字替换为最多两个零
  • 使用
    重命名
    更改文件名

  • 请注意,我还没有尝试过它,重命名的文档有点奇怪,因为它涉及ftp站点,但它可能会正常工作。如果它不起作用,我想您可以复制所有文件,然后删除旧文件。

    如果您在Unix或Linux机器上,您可以尝试这个小型的shell脚本:

    在终端中,转到存放文件的目录

    您可以先试用它,而不必真正重命名您的文件,方法是将
    mv
    替换为
    echo
    ,以查看它是否按预期工作

    for file in *; do
      mv $file $(echo $file | awk -F '_' '{ printf "%02d_%s_%003d_%s\n", $1, $2, $3, $4 }')
    done
    
    还是作为一个班轮

    for file in *; do mv $file $(echo $file | awk -F '_' '{ printf "%02d_%s_%003d_%s\n", $1, $2, $3, $4 }'); done
    
    档案

    1_x_0_a.jpg
    1_x_0_b.jpg
    1_x_5_a.jpg
    15_x_160_a.jpg
    15_x_160_b.jpg
    15_x_165_a.jpg
    
    我得到了结果

    01_x_000_a.jpg
    01_x_000_b.jpg
    01_x_005_a.jpg
    15_x_160_a.jpg
    15_x_160_b.jpg
    15_x_165_a.jpg
    

    以下代码应该适用于相对较新版本的MATLAB

    fileStruct = dir;
    files = {fileStruct.name};
    for oldFile = files
        oldFile = oldFile{1};  //Takes string out of cell
    
        // Embedding the sprintf in a regexprep only works in certain versions
        newFile = regexprep(oldFile, '^(\d*)', '${sprintf(''%02d'', str2num($1))}');
        newFile = regexprep(newFile, '(?<=_)(\d*)(?=_)', '${sprintf(''%03d'', str2num($1))}');
    
        movefile(oldFile, newFile);
    end
    
    fileStruct=dir;
    files={fileStruct.name};
    对于oldFile=文件
    oldFile=oldFile{1}//从单元格中取出字符串
    //在regexprep中嵌入sprintf只适用于某些版本
    newFile=regexprep(旧文件“^(\d*)”,“${sprintf(“%02d”,str2num($1))}”);
    
    newFile=regexprep(newFile,'(?@erik:我解开了你的编辑。我同意这是一个可以在系统级处理的文件重命名问题,但OP特别想知道如何在Matlab中执行此操作。@Jonas好的,那么它应该得到两个标记。因为这是一个文件重命名问题。我不知道Matlab能够更改文件名。请阅读文件-rename标记,以便其他人了解您可以使用matlab管理文件名。:-)@erik:很公平。完成了。回答很好!这是我使用的过程,除了,我使用
    movefile
    命令,而不是
    rename
    。这是普通的matlab吗?如果不是的话,如何运行它?不,对不起。这不是matlab语法,而是Shell脚本。这只是在Unix/Linux Shell中完成任务的另一种方法。它不太容易编写。:-)嗯,现在它是这样做的,它在第一个数字中加了一个数字,但在某些情况下它不会改变第二个数字。例如:7_x_30_a.jpg…这里它从不加030有人知道为什么吗?谢谢我总是需要在x之前加2个数字,在x之后加3个数字:dd_x_ddd@MareB啊,对不起,添加了缺少的星号。现在应该可以工作了