将特定数量的文件从大量文件池移动到文件夹中

将特定数量的文件从大量文件池移动到文件夹中

我在一个文件夹(源)中有 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 个。

*.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
}

相关内容