Matlab:按顺序重命名文件

时间:2014-11-26 11:50:47

标签: matlab file rename sequential

我有许多没有顺序的文本文件:

010010.txt 010030.txt 010070.txt

如何将文件名更改为:

text01.txt text02.txt ....

是否可以不重写旧目录,而是创建新目录

我使用了以下脚本,但结果是它工作正常但是从text001.txttext021.txt再到text041.txt

任何想法?

directory  = 'C:\test\'; %//' Directory with txt files
filePattern = fullfile(directory, '*.txt'); %//' files pattern with absolute paths
old_filename = cellstr(ls(filePattern)) %// Get the filenames
file_ID = strrep(strrep(old_filename,'file',''),'.txt','') %// Get numbers associated with each file

file_ID_doublearr = str2double(file_ID)

file_ID_doublearr = file_ID_doublearr - min(file_ID_doublearr)+1

file_ID = strtrim(cellstr(num2str(file_ID_doublearr)))

str_zeros = arrayfun(@(t) repmat('0',1,t), 4-cellfun(@numel,file_ID),'uni',0) %// Get zeros string to be pre-appended to each filename

new_filename = strcat('file',str_zeros,file_ID,'.txt') %// Generate new filenames

cellfun(@(m1,m2) movefile(m1,m2),fullfile(directory,old_filename),fullfile(directory,new_filename)) %// Finally rename files with the absolute paths

1 个答案:

答案 0 :(得分:0)

看起来很复杂。我只是进行系统调用以将所有文件移动到新目录,然后使用其他系统调用一次一个地重命名每个文件。它看起来像你正在使用Windows,所以我将为该平台提供解决方案。您可以从源目录中读取文件的开头。

directory  = 'C:\test\'; %// Directory with txt files
directoryToCopyOver = 'C:\out\'; %// Directory where you want to copy the files over

%// Copy source directory to target directory
system(['xcopy ' directory ' ' directoryToCopyOver]);

filePattern = fullfile(directoryToCopyOver, '*.txt'); %//' files pattern with absolute paths
names = dir(filePattern); %// Find all files with above pattern

%// For each file we have...
for idx = 1 : numel(names)
    name = names(idx).name; %// Get a name of a file
    %// Rename this file to textxx.txt
    outName = sprintf('text%2.2d.txt', idx);

    %// Call system and rename the file
    system(['ren ' directoryToCopyOver name ' ' directoryToCopyOver outName]);
end

需要注意的一些重要事项是我使用system对Windows命令提示符进行系统调用。我使用xcopy将整个目录从一个点复制到另一个点。在这种情况下,这将是您的源目录到新目标目录。在我这样做之后,我调用MATLAB的dir来确定所有与你所布置的特定模式相匹配的文件名,即所有文本文件。

然后,对于我们拥有的每个文本文件名,我们读取此名称,然后创建类型为textxx.txt的输出名称,其中xx是一个从1开始的数字到尽可能多的文本文件我们有,然后我调用Windows命令提示符命令ren将文件从原始名称重命名为新名称。另外,请看一下MATLAB的sprintf。它旨在使用格式分隔符创建字符串。如果您看到我如何调用它,%2.2d意味着我希望数字长度为两位数,如果数字小于两位数,则用零填充空格。如果您想增加数字位数,只需在每个地方添加更多数字即可。例如,如果您想要4个数字,请执行%4.4d,依此类推。这将正确创建正确的字符串,以便我们可以在这个新目录中重命名正确的文件。


希望这有帮助!