1

我真的有很多文件命名为:

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 位数字。

4

3 回答 3

2

以下代码应该适用于相对较新版本的 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
于 2013-01-31T21:04:29.350 回答
0

以下是一些可以帮助您的步骤:

  1. 用于dir获取文件名列表。
  2. 用于regexprep用带前导零的起始数字替换起始数字
  3. 用于regexprep用最多两个零的起始数字替换中间数字
  4. 用于rename更改文件名

请注意,我没有尝试过,rename 的文档有点奇怪,因为它指的是 ftp 站点,但它可能只是工作。如果它不起作用,我想您可以复制所有文件,然后删除旧文件。

于 2013-01-31T16:15:02.150 回答
0

如果你在 Unix 或 Linux 机器上,你可以试试这个小shell 脚本

在终端中,转到您拥有文件的目录。

您可以先尝试一下,而无需真正重命名文件,只需将 替换为mvecho查看它是否按预期工作。

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
于 2013-01-31T16:24:47.877 回答