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

Reg*_*gmi 1 files

我在一个文件夹中有 100 万个文件(来源)。我想创建一个新文件夹,将 5K 文件移入其中并重复,直到源中的所有文件都移到单独的目标文件夹中。最终结果将是 200 个新文件夹,每个文件夹包含 5K 个文件。我想最好在 Windows 中执行此操作。

文件夹名称可以随机创建,文件可以从池中随机选取。

更新 1:生成的 200 个文件夹将直接位于根目录下,因此不需要目标文件夹结构。

Mar*_*son 5

为了准确回答您想要的问题,这会将 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 ;
    }
}
Run Code Online (Sandbox Code Playgroud)

这与您所问的完全不符,但处理此问题的常用方法是根据文件名中的第一个字符将文件分成两个深度。

这不会均匀分布文件,但如果文件以 GUID 命名,则每个级别将限制为 256 个文件夹。

在 Powershell 中,*.pdfc:\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
}
Run Code Online (Sandbox Code Playgroud)

  • @Regmi 我不是脚本编写服务。我相信您可以调整我提供的脚本以使其以这种方式工作。 (4认同)