Переместить определенное количество файлов в папки из большого пула файлов.

Переместить определенное количество файлов в папки из большого пула файлов.

У меня 1 миллион файлов в одной папке (источник). Я хочу создать новую папку, переместить в нее 5 тыс. файлов и повторять, пока все файлы в источнике не будут перемещены в отдельные папки назначения. Конечным результатом будет 200 новых папок с 5 тыс. файлов в каждой. Я хочу сделать это предпочтительно в Windows.

Имена папок могут быть созданы случайным образом, файлы могут быть выбраны случайным образом из пула.

Обновление 1: полученные 200 папок будут располагаться непосредственно в корневом каталоге, поэтому структура папок назначения не требуется.

решение1

Чтобы ответить на то, что вы хотите, это переместит 5000 файлов в папки, начиная с 1и продолжая до тех пор, пока не закончатся файлы для перемещения. Скорее всего, в вашей последней папке будет менее 5000 файлов.

В 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 для сортировки *.pdfот 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
}

Связанный контент