更改文件名

时间:2012-10-15 09:48:28

标签: file matlab filenames

我有一个关于如何更改某些文件名的问题。问题是我有这种档案,例如:

25614_z.zip
25312_z.zip
25003_z.zip

我想要创造:

lp_25_614.zip
lp_25_312.zip
lp_25_003.zip

所以,我需要自动化这个过程

lp + 25(两个第一位数字)+ 3 4和5位置的数字)+ dot zip

有什么办法吗?

修改

例如,这将是我的条件:

XXXX

if fileNames{k}(3:5) >0 <5 (the interval)= 2
fileNames{k}(3:5)> >5 >10 =10

所以,例如:

fileNames {k}(3:5)= 05

在条件之后,它将在重命名中替换为= 2

然后我想在重命名上添加它。

newFileName = ['fiche' fileNames{k} (3) 'pd' fileNames{k}(3:5) 'XXX '.tar.gz']; 

这可能吗?

2 个答案:

答案 0 :(得分:2)

您可以使用movefile重命名文件:

 myPath = 'C:\myFolder\'; % path to your files

fileNames = {
    '25614_z.zip'
    '25312_z.zip'
    '25003_z.zip'
    }


for k = 1:length(fileNames)
    newFileName = ['lp_' fileNames{k}(1:2) '_' fileNames{k}(3:5) '.zip'];
    % renaming
    movefile([myPath fileNames{k}], [myPath newFileName]); 
end

<强>〜编辑〜 关于你的编辑:是的,可以为不同的情况生成不同的文件名。请注意,下面的示例非常笨拙,只有在您只有少量不同情况时才应使用。

myPath = 'C:\myFolder\'; % path to your files

fileNames = {
    '25614_z.zip'
    '25312_z.zip'
    '25003_z.zip'
    }


for k = 1:length(fileNames)
    n = num2str(fileNames{k}(3:5));
    if n > 0 && n < 5
        fileName = % put your file name for this case here
    elseif n >= 5 && n < 10
        fileName = % put your file name for this case here
    elseif n >= 10 && n < 20
        fileName = % put your file name for this case here
    end
    % renaming
    movefile([myPath fileNames{k}], [myPath newFileName]);
end

答案 1 :(得分:0)

作为一种更通用的解决方案,您可以使用regexpToken参数来匹配字符串的各个部分:

for k = 1:length(fileNames)
    splitname = regexp(fileNames{k}, '(\d\d)(\d\d\d)', 'Tokens');
    fname_new = ['lp_' splitname{1}{1} '_' splitname{1}{2} '.zip'];
    movefile(fileNames{k}, fname_new);
end

此处,regexp中的模式匹配两位数后跟三位数。