Files

將特定數量的文件從大型文件池中移動到文件夾中

  • June 17, 2015

我在一個文件夾中有 100 萬個文件(源)。我想創建一個新文件夾,將 5K 文件移入其中並重複,直到源中的所有文件都移到單獨的目標文件夾中。最終結果將是 200 個新文件夾,每個文件夾包含 5K 文件。我想最好在 Windows 中執行此操作。

文件夾名稱可以隨機創建,文件可以從池中隨機挑選。

更新 1:生成的 200 個文件夾將直接位於根目錄下,因此不需要目標文件夾結構。

為了準確回答您的要求,這會將 5,000 個文件移動到文件夾中,從開始1並繼續,直到用完要移動的文件。您的最後一個文件夾中的文件很可能少於 5,000 個。

在powershell中,未經測試,所以YMMV。

$filesperfolder = 5000
$sourcePath = "C:\Temp"
$destPath = "C:\Temp\Sorted"
$i = 0;
$folderNum = 1;

Get-ChildItem "$sourcePath\*.pdf" | % {

   New-Item -Path ($destPath + "\" + $folderNum) -Type Directory -Force
   Move-Item $_ ($destPath + "\" + $folderNum);

   $i++;

   if ($i -eq $filesperfolder){
       $folderNum++;
       $i = 0 ;
   }
}

這不符合您所要求的確切內容,但處理此問題的常用方法是根據文件名中的第一個字元將文件分成兩個更深的部分。

這不會平均分配文件,但如果文件使用 GUID 命名,則每個級別的文件夾數量限制為 256 個。

*.pdf在 Powershell 中,從c:\tempto整理c:\temp\sorted

$sourcePath = "C:\Temp"
$destPath = "C:\Temp\Sorted"
Get-ChildItem "$folderPath\*.PDF" | %{
   $newFolder = $destPath + ("\" + $_.Name.SubString(0,2) + "\"  + $_.Name.SubString(3,2)).ToUpper();

   New-Item -Path $newFolder -Type Directory -Force
   Move-Item $_ $newFolder
}

引用自:https://serverfault.com/questions/699534