我真的有很多文件命名为:
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 位数字。
我真的有很多文件命名为:
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 位数字。
以下代码应该适用于相对较新版本的 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
以下是一些可以帮助您的步骤:
dir
获取文件名列表。regexprep
用带前导零的起始数字替换起始数字regexprep
用最多两个零的起始数字替换中间数字rename
更改文件名请注意,我没有尝试过,rename 的文档有点奇怪,因为它指的是 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