我试图创建一个能够从listbox-index改变shotcuts名称的小程序。 我创建了一个按钮,列出了每个文件的目标"扩展名"(以combobox1为目标),我想要另一个按钮能够改变文件名:
按钮1代码(搜索文件):
Dim kilde As New FolderBrowserDialog
If kilde.ShowDialog = Windows.Forms.DialogResult.OK Then
Dim mappe = New System.IO.DirectoryInfo(kilde.SelectedPath)
txtbSti.Text = kilde.SelectedPath
End If
For Each f In Directory.GetFiles(txtbSti.Text, "*" & ComboBox1.Text & "*", SearchOption.AllDirectories)
If File.Exists(f) Then
With ListBox1
With .Items
.Add(f)
End With
End With
End If
Next f
这给了我一个包含所需文件的列表。 有没有办法,重命名文件,在我的情况下,列在listbox1中,逐行列出?
按钮2(无效)
For Each r As String In ListBox1.Items
System.IO.Path.ChangeExtension(ComboBox1.Text, " ")
Next r
答案 0 :(得分:1)
您可以使用File.Move
来重命名"一个文件:
System.IO.File.Move("oldfilename", "newfilename")
例如:
For Each oldFilePath As String In ListBox1.Items
If System.IO.File.Exists(oldFilePath) Then
Dim dir = System.IO.Path.GetDirectoryName(oldFilePath)
Dim newFilePath = System.IO.Path.Combine( dir, "newFileName")
System.IO.File.Move(oldFilePath, newFilePath)
End If
Next
修改:在这种情况下,请删除自动生成的扩展程序" .avi - 快捷方式"
如果您只想更改扩展程序,可以使用Path.ChangeExtension
:
System.IO.Path.ChangeExtension(oldFilePath, "new_extension")
更新:哦,对不起,这是该名称的一部分;文件命名,例子; J:\ Homemovies \ Jumping around.avi - Shortcut.lnk,我想删除" .avi - Shortcut" listbox1中列出的实际文件名称的一部分,用于查找目标文件夹中具有该特定扩展名的所有文件的名称; J:\ Homemovies \ jumping around.lnk
您可以使用String.Replace
:
Dim name = System.IO.Path.GetFileName(oldFilePath).ToLowerInvariant()
Dim newName = name.Replace(".avi - shortcut.", ".")
Dim newPath = System.IO.Path.Combine(
System.IO.Path.GetDirectoryName(oldFilePath), newName)
Update2 :仍无法使其中任何一种解决方案正常工作
这是一份完整的工作样本:
首先,阅读目录中的快捷方式:
Dim dir = "C:\Temp\Homemovies"
For Each fn In Directory.EnumerateFileSystemEntries(dir, "*avi - shortcut*.*", SearchOption.AllDirectories)
ListBox1.Items.Add(fn)
Next
第二个(在你的按钮点击处理程序中),通过删除包含(substring)"avi - shortcut"
的部分来重命名那些.Ink文件,同时处理它已经存在的情况:
For Each fn As String In ListBox1.Items
If File.Exists(fn) Then
Dim folder = Path.GetDirectoryName(fn)
Dim fileName = Path.GetFileNameWithoutExtension(fn)
Dim extension = Path.GetExtension(fn)
Dim dotParts = fileName.Split("."c)
Dim allButAviShortCut = From part In dotParts
Where part.IndexOf("avi - shortcut", StringComparison.InvariantCultureIgnoreCase) = -1
Dim newFileName = String.Join(".", allButAviShortCut)
Dim newPath = System.IO.Path.Combine(dir, newFileName & extension)
Dim number = 0
While File.Exists(newPath)
' exists already, append number
number += 1
Dim newFileNameWithNum = String.Format("{0}_{1}", newFileName, number)
newPath = System.IO.Path.Combine(dir, newFileNameWithNum & extension)
End While
System.IO.File.Move(fn, newPath)
End If
Next
答案 1 :(得分:0)
请考虑以下事项:
ListBox1
包含所选目录中所有文件的列表。txtbSti
是将path
保存到所选目录的文本框。New_fileX
,其中X
是ListBox1
现在看一下代码:
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim i As Integer = 0
For Each r As String In ListBox1.Items
i += 1
My.Computer.FileSystem.RenameFile(txtbSti.Text & ":\" & r, "New_file" & i & ".txt")
Next r
End Sub