按名称重命名多个文件
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
我正在编写一个小程序,它可以根据文件名重命名选定目录中的多个文件。 这是我现在使用的:
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