2011-05-04 48 views
1

下面的代碼根據不同的文件名創建多個文件夾,並將這些文件移動到新的文件夾中。例如,文件ABC和XYZ被移動到一個新創建的名爲ABC和XYZ的文件夾中。我想推進代碼以允許稍微不同的文件名進入一個公共文件夾。例如,我想將文件ABC_rock,ABC_soil和ABC_water放入名爲ABC的文件夾中,並將AND文件XYZ_rock,XYZ_soil和XYZ_water放入名爲XYZ的文件夾中。我不想爲ABC_rock,ABC_soil和ABC_water創建單獨的文件夾。任何建議,非常感謝。感謝您的幫助。VB.NET根據文件名創建文件夾

 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 

回答

2

從一開始就分開文件名 - 我在這裏使用下劃線,但是您可以根據需要更改它。拆分將在所有情況下至少創建一個項目,如果你只在第一部分有興趣,你可以通過改變一個行處理這個問題:

Dim folderName As String = IO.Path.GetFileNameWithoutExtension(filepath).Split("_")(0) 

如果有下劃線,它採用之前的所有第一一。如果沒有下劃線,它將使用整個文件名。

+0

完美謝謝! – artwork21 2011-05-04 18:41:45

+0

我試圖通過兩個下劃線__而不是一個來分割,但它只是由第一個_實例分割。我如何通過__分割? – artwork21 2011-05-09 12:37:01

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... 
} 

請注意上面的代碼假設您的分隔符是下劃線字符。

0

如果所有文件名都具有相同的格式PREFIX_somethingElse,則可以在每個文件名上使用Split()函數來查找通用前綴。一旦獲得了所有前綴的列表,就可以使用此前綴創建文件夾,然後將每個文件移動到名稱爲其前綴的文件夾中。

爲此,您需要知道文件名中的分隔符以便使用Split()函數。

這一過程將是這樣的:

  1. 通過使用 分裂()來獲取前綴,並添加 每個新的前綴,你發現到列表
  2. 文件名中聲明字符串
  3. 迭代列表
  4. 遍歷整個列表並創建 每個前綴的文件夾
  5. 遍歷文件名並將每個文件移動到名爲的文件夾該文件名的前綴。

如果您使用更復雜的數據結構以避免多次迭代,該過程可以大大優化,但這是基本思想。

相關問題