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啊,对不起,添加了缺少的星号。现在应该可以工作了