Para responder exatamente o que você quer, isso moverá 5.000 arquivos para pastas, começando com 1
e continuando até que fique sem arquivos para mover. Sua última pasta provavelmente terá menos de 5.000 arquivos.
No powershell, não testado, então 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 ;
}
}
Isso não está de acordo com o que você fez exatamente , mas uma maneira comum de lidar com esse problema é dividir os arquivos em mais duas profundidades, com base nos primeiros caracteres do arquivo. nome do arquivo.
Isso não distribui os arquivos uniformemente, mas se os arquivos forem nomeados com GUIDs, você terá um limite de 256 pastas em cada nível.
No Powershell, para classificar *.pdf
de c:\temp
para 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
}