按名称重命名多个文件

时间:2015-03-29 18:48:03

标签: vb.net sorting file-rename

我正在编写一个小程序,该程序应该通过文件名重命名所选目录中的多个文件。 这就是我现在使用的:

    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

1 个答案:

答案 0 :(得分:2)

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

请记住,你有SearchOption.AllDirectories,这将返回subs,所以你的文件名数组可能不是你想的...要么改变排序的逻辑,要么单独处理subs。

'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