如何从目录中的文件名中删除数字前缀?

时间:2014-04-30 16:01:33

标签: shell

我在目录中有一些mp3文件。它们采用以下格式

  1. 9989923_songname.mp3
  2. songname012.mp3
  3. 898887888.mp3
    1. songname.mp3
  4. 4_songname.mp3
  5. 我需要编写一个shell脚本来将“Audio”目录中的文件重命名为以下格式

    1. 9989923_songname.mp3 - > songname.mp3
    2. songname012.mp3 - > songname1.mp3(如果存在多个同名文件,则为一系列)
    3. 898887888.mp3 - > unknown1.mp3(一个系列,如果所有的字符编号)
      1. mysongname.mp3 - > mysongname.mp3
    4. 4_yoursongname.mp3 - > yoursongname.mp3
    5. 如果有重复的名称,那么它将使其成为带有后缀序列号的系列。 请帮我写这个脚本。 (如果您能解释解决方案,请欣赏)

1 个答案:

答案 0 :(得分:-1)

这里我创建了一个方法,它将目录名作为第一个参数,并从文件名中删除字符串。


    private static void RemovePrefixRecursively(string dirName, string prefix)
    {
                DirectoryInfo dirInfo = new DirectoryInfo(dirName);
                foreach (var file in dirInfo.GetFiles())
                {
                    var fileName = file.Name;
                    var fileExtention = file.Extension.TrimStart('.');
                    fileName = fileName.Replace("." , string.Empty);
                    if(!string.IsNullOrEmpty(fileExtention))                fileName = fileName.Replace(fileExtention, string.Empty);
                    System.IO.File.Move(file.FullName, string.Format("{0}\\{1}.{2}", dirName, fileName.Replace(prefix, string.Empty), fileExtention));
                }
                foreach (var dir in dirInfo.GetDirectories())
                {
                    RemovePrefixRecursively(dir.FullName,prefix);
                }
    }