как копировать файлы порционно (например, по три)
Нужно переместить 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