如何批量重命名文件为3位数?

时间:2015-07-08 00:15:08

标签: matlab file batch-file rename alphanumeric

我事先道歉,这个问题并不具体。但我的目标是拍摄一堆图像文件,目前命名为:0.tif,1.tif,2.tif等...并将它们重命名为000.tif,001.tif,002 .tif,...,010.tif等......

我想这样做的原因是因为我试图将图像加载到matlab中并进行批处理,但是matlab没有正确地对它们进行排序。我使用dir命令作为dir(*.tif)来获取所有图像并将它们加载到我可以迭代并处理的文件数组中,但是在这个数组元素1中是0.tif,元素2是1.tif,元素3是10.tif,元素4是100.tif,等等。

我希望在处理元素时保持元素的顺序。但是,我不在乎是否必须在处理它们之前改变元素的顺序(即我可以使其重命名,例如,如果必须的话,可以使用2.tif到10.tif)但我正在寻找一个以我最初描述的方式转换文件名的方法。

如果有更好的方法让matlab在使用dir将文件加载到数组中时正确排序文件,请告诉我,因为这样会更容易。

谢谢!

3 个答案:

答案 0 :(得分:3)

如果需要,您可以执行此操作而无需重命名文件。当您使用dir抓取文件时,您将拥有如下文件列表:

files = 
   '0.tif'
   '1.tif'
   '10.tif'
   ...

您可以使用regexp

抓取数字部分
nums = regexp(files,'\d+','match');
nums = str2double([nums{:}]);
nums =
   0 1 10 11 12 ...

regexp将其匹配作为单元格数组返回,第二行将其转换回实际数字。

我们现在可以通过对结果数组进行排序来获得实际的数字顺序:

[~,order] = sort(nums);

然后按正确顺序放置文件:

files = files(order);

这个应该(我还没有测试过,我没有一个文件夹里装满数字标签的文件),产生一个像这样的文件列表:

files=
   '0.tif'
   '1.tif'
   '2.tif'
   '3.tif'
   ...

答案 1 :(得分:1)

这部分取决于您拥有的matlab版本。如果您的版本为findstr,则应该可以正常使用

num_files_to_rename = numel(name_array);

for ii=1:num_files_to_rename
    %in my test i used cells to store my strings you may need to
    %change the bracket type for your application
    curr_file = name_array{ii};

    %locates the period in the file name (assume there is only one)
    period_idx = findstr(curr_file ,'.');

    %takes everything to the left of the period (excluding the period)
    file_name = str2num(curr_file(1:period_idx-1));

    %zeropads the file name to 3 spaces using a 0
    new_file_name = sprintf('%03d.tiff',file_name)

    %you can uncomment this after you are sure it works as you planned
    %movefile(curr_file, new_file_name);
end

现在已注释掉实际的重命名操作movefile。在取消注释并重命名所有文件之前,请确保输出名称符合您的预期。

编辑此代码中没有真正的错误检查,它只是假设每个文件名都有一个且只有一个句点,并且实际的数字是名称

答案 2 :(得分:0)

下面的批处理文件会重命名您想要的文件:

@echo off
setlocal EnableDelayedExpansion

for /F "delims=" %%f in ('dir /B *.tif') do (
   set "name=00%%~Nf"
   ren "%%f" "!name:~-3!.tif"
)

请注意,即使序列中缺少数字,此解决方案也会保留原始文件的相同顺序