1 つのフォルダー (ソース) に 100 万個のファイルがあります。新しいフォルダーを作成し、そこに 5K 個のファイルを移動し、ソース内のすべてのファイルが別の宛先フォルダーに移動されるまでこれを繰り返します。最終結果は、それぞれ 5K 個のファイルを含む 200 個の新しいフォルダーになります。できれば Windows でこれを実行したいと思います。
フォルダー名はランダムに作成でき、ファイルはプールからランダムに選択できます。
更新 1: 結果として得られる 200 個のフォルダーはルートの直下に存在するため、宛先フォルダー構造は必要ありません。
答え1
正確に答えると、これは 5,000 個のファイルをフォルダーに移動し、1
移動するファイルがなくなるまで続行します。最後のフォルダーには、おそらく 5,000 個未満のファイルが含まれます。
PowerShell ではテストされていないため、結果は異なる場合があります。
$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 ;
}
}
これはあなたが尋ねたことと一致しませんその通りただし、この問題に対処する一般的な方法は、ファイル名の最初の文字に基づいて、ファイルをさらに 2 つの深度に分割することです。
これにより、ファイルは均等に分散されませんが、ファイルに GUID の名前が付けられている場合は、各レベルで 256 個のフォルダーの制限があります。
*.pdf
Powershell では、からc:\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
}