我有许多没有顺序的文本文件:
010010.txt 010030.txt 010070.txt
如何将文件名更改为:
text01.txt text02.txt ....
是否可以不重写旧目录,而是创建新目录
我使用了以下脚本,但结果是它工作正常但是从text001.txt
到text021.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
答案 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
,依此类推。这将正确创建正确的字符串,以便我们可以在这个新目录中重命名正确的文件。
希望这有帮助!