按名称重命名多个文件

Renaming multiple files by name

我正在编写一个小程序,它可以根据文件名重命名选定目录中的多个文件。 这是我现在使用的:

    Dim sourcePath As String = dir
    Dim searchPattern As String = "*." & ComboBox3.Text
    Dim i As Integer = 1
    For Each fileName As String In Directory.GetFiles(sourcePath, searchPattern, SearchOption.AllDirectories)
        File.Move(Path.Combine(sourcePath, fileName), Path.Combine(sourcePath, type & i & "." & ComboBox3.Text))
        i += 1
    Next

但我希望它更像:

    For Each fi As FileInfo In Directory.GetFiles(searchPattern).OrderBy(Function(s) s.FullName)
        File.Move(Path.Combine(sourcePath, fileName), Path.Combine(sourcePath, type & i & "." & ComboBox3.Text))
        i += 1
    Next

这就是我所达到的程度,但它并没有像我希望的那样工作。 另外,我想知道是否可以使用 GetFiles 排除文件类型,我不希望它重命名文本文件。

谢谢 :)

编辑: 第一个代码几乎完美,它从 'FolderBrowserDialog' 获取目录并重命名路径文件夹中的所有文件。问题是它有时会弄错顺序:假设我有这 3 个文件:

01Movie.avi、07Movie.avi 和 11Movie.avi

我希望它们按名称在文件夹中的顺序重命名:

01Movie.avi 应该是 Movie1.avi、07Movie.avi -> Movie2.avi 和 11Movie.avi -> Movie3.avi

尽量不要修改您仍在循环访问的集合。创建了一个分离数组来使用。然后对您的新数组进行排序,以按照您描述的顺序获取它们。

请记住,您有 SearchOption.AllDirectories,这将转到 return 个子目录,因此您的文件名数组可能不是您所想的...要么更改排序逻辑,要么单独处理潜艇。

'detached array of file names
 Dim fileNames() As String = Directory.GetFiles(sourcePath, searchPattern)

 'sort the names  System.Array.Sort(Of String)(fileNames)
 Dim newFileName As String  
 For Each fileName As String In fileNames

   'manipulate you filename here    
   'Path.GetFileNameWithoutExtension(fileName) might help   
   'Path.GetExtension(fileName) might help

    newFileName =  "newFileNameWithoutExtension" & i.ToString

    File.Move(Path.Combine(Path.GetDirectoryName(fileName), fileName), Path.Combine(Path.GetDirectoryName(fileName), newFileName))
     i += 1  
 Next