2012-10-15 225 views
2

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

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

有没有什么办法可以做到这一点?

EDIT

例如,这将是我的条件:

XXXX

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

所以,例如:

文件名{K}(3: 5)= 05

条件后它将被替换为重命名= 2

然后我想将它添加到重命名的名称上。

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

这可能吗?

回答

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 
+0

非常感谢H.Muster !! – user1578688

+0

有一个问题!我在名为'NewFileName'的新数组中更改了名称,但我不知道是否可以使用这个新名称复制与原始文件相同的文件?可能吗?在此先感谢, – user1578688

+0

要重命名文件,请使用命令'movefile',就像我的代码示例中一样。 –

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模式是匹配的是两个数字后面的三个数字。

+0

非常感谢angainor!它最后的解决方案,但我也会尝试你的! ;) – user1578688

+0

它发生与您的代码相同!我有新名字的列表,但我不知道如何创建一个新文件夹中重命名的新文件。我试图找到如何做到这一点! – user1578688