как копировать файлы порционно (например, по три)

Нужно переместить 20 файлов *.bak с одной машины на другую. Дело в том, что при перемещении есть ограничение на объём передаваемых файлов (файл должен быть не больше 1000 мб, за один раз перемещения нельзя превышать объём в 3ГБ). Каждый мой *.bak весит ~900 мб. Задумка такая, чтобы написать powershell скрипт, который будет класть 3 файла *.back, дождётся, когда они переместятся, потом следующие три файла и т.д., пока не переместятся все 20. в powershell не силён, прошу помощи:

#папка из которой берём бекапы:
$s = get-childitem D:\Sql_backup\ -recurse '*.bak' 
$s.length

#папка в которую кладём бекапы (порционно, по 3 штуки):
$w = get-childitem D:\Temp2\ -recurse '*.bak'
$w.length


FOR ([int]$TestVar = 1; $TestVar -lt 21;$TestVar++){       
  WHILE ($w.length -lt 4){
       FOREACH ($var In $s){           
           IF ($var.name -match "$TestVar") { #копирую по 1 бекапу в зависимости от имени, отбирая через регулярку
                           Copy-Item -Path D:\Sql_backup\$var -Destination D:\Temp2 
            }
       }
   }
}

В общем, когда пытаюсь реализовать while, который смотрит не переместился ли какой файл, чтобы доложить ещё один,чтобы их было не меньше 3-х, ничего не происходит. Помогите с реализацией, а может и с подходом, если несложно.


Ответы (1 шт):

Автор решения: Алексей Семенов
Get-ChildItem c:\tmp -file | ForEach-Object -Begin {$i = 0} {
    [PSCustomObject]@{
        Name = $_.FullName
        ShapeNum = [math]::Truncate(($i++ / 3))
    }
} | Group-Object -Property ShapeNum | ForEach-Object {
    Write-Host $_.Name
    $_.Group | ForEach-Object {
        Write-Host "`t$($_.Name)"
    }
}


0
        C:\tmp\10_227_202_9.csv
        C:\tmp\10_227_202_9.xlsx
        C:\tmp\connectionTest.log
1
        C:\tmp\connectionTest.ps1
        C:\tmp\ERRORLOG
        C:\tmp\FarEng.hlf
2
        C:\tmp\FarEng.lng
        C:\tmp\FarRus.hlf
        C:\tmp\FarRus.lng
3
        C:\tmp\File_id.diz
        C:\tmp\log.csv
        C:\tmp\log.txt
4
        C:\tmp\log1.txt
        C:\tmp\lpeg.dll
        C:\tmp\lua5.1.dll
5
        C:\tmp\out.txt
        C:\tmp\run.bat
        C:\tmp\script.ps1
→ Ссылка