下面的代码根据不同的文件名创建多个文件夹,并将这些文件移动到新文件夹中。例如,文件ABC和XYZ被移动到新创建的名为ABC和XYZ的文件夹中。我想推进代码,以允许稍微不同的文件名进入一个公共文件夹。例如,我想将文件ABC_rock,ABC_soil和ABC_water放入名为ABC的文件夹中,并将文件XYZ_rock,XYZ_soil和XYZ_water放入名为XYZ的文件夹中。我不想为ABC_rock,ABC_soil和ABC_water创建单独的文件夹。任何建议都非常感谢。谢谢你的帮助。
Dim strOutputLocation As String = "C:\Temp"
Dim rootPath As String = strOutputLocation
For Each filepath As String In IO.Directory.GetFiles(rootPath)
Dim folderName As String = IO.Path.GetFileNameWithoutExtension(filepath)
Dim folderPath As String = IO.Path.Combine(rootPath, folderName)
If Not IO.Directory.Exists(folderPath) Then
IO.Directory.CreateDirectory(folderPath)
End If
Dim fileName2 As String = IO.Path.GetFileName(filepath)
Dim newFilePath As String = IO.Path.Combine(folderPath, fileName2)
File.Move(filepath, newFilePath)
Next
答案 0 :(得分:2)
从开始就打开文件名 - 我在这里使用下划线,但你可以根据需要改变它。拆分将在所有情况下创建至少一个项目,如果您只对第一部分感兴趣,可以通过更改一行来处理:
Dim folderName As String = IO.Path.GetFileNameWithoutExtension(filepath).Split("_")(0)
如果有下划线,它会使用第一个之前的所有内容。如果没有下划线,它将使用整个文件名。
答案 1 :(得分:0)
如果你知道你的分隔符是什么,那么你可以在提取文件名后使用像.Split()
这样简单的东西。如果文件名称可能比您需要使用RegEx
更复杂。
var fileName = "ABC_rock";
var parts = fileName.Split(new String[] { "_" }, System.StringSplitOptions.RemoveEmptyEntries);
if (parts.Length >= 1) {
var folderName = parts[0];
// Move fileName here...
}
请注意,上面的代码假定您的分隔符是下划线字符。
答案 2 :(得分:0)
如果所有文件名的格式都与PREFIX_somethingElse相同,则可以对每个文件名使用Split()函数来查找公共前缀。获得所有前缀的列表后,可以使用此前缀创建文件夹,然后将每个文件移动到名为其前缀的文件夹中。
要执行此操作,您需要知道文件名上的分隔符,以便使用Split()函数。
这个过程将是这样的:
如果您使用更复杂的数据结构以避免多次迭代,则可以大大优化该过程,但这是基本想法。