將特定數量的檔案從大型檔案池移至資料夾

將特定數量的檔案從大型檔案池移至資料夾

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

資料夾名稱可以隨機創建,檔案可以從池中隨機選取。

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

答案1

為了準確地回答您想要的內容,這會將 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 個。

在 Powershell 中,要對*.pdffromc:\temp進行排序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
}

相關內容