Копировать файлы, пока они не превысят указанный размер
Мне нужно скопировать файлы в папку, пока они не превысят указанный размер. Я написал следующий скрипт, но он не работает со следующей ошибкой:
Невозможно сравнить "Microsoft.PowerShell.Commands.GenericMeasureInfo", поскольку он не сопоставим. На C:\33.ps1:8 char:1 + "{0:N2}" -f ($colItems.sum / 1024MB)
$files = Get-ChildItem C:\source -Recurse | % { $_.FullName }
foreach($file in $files) {
do {
Copy-Item $file -Recurse D:\target
$colItems = (Get-ChildItem d:\target -recurse | `
Measure-Object -property length -sum)
"{0:N2}" -f ($colItems.sum / 1024MB)
}
while ($colItems -le 10)
}
Что я делаю неправильно?
1 ответ
Решение
Условие while будет проверено после первого цикла do. Поскольку вы уже перечисляете файлы, ваш скрипт скопирует все файлы.
Вы можете опустить цикл do-while и разорвать foreach, если предел достигнут:
$files=Get-ChildItem C:\source -Recurse | % { $_.FullName }
$sum = 0
$sizeLimitInGB = 10
foreach($file in $files)
{
$colItems = (Get-ChildItem d:\target -recurse | Measure-Object -property length -sum)
if (($colItems.sum / 1GB) -gt $sizeLimitInGB)
{
break; # Limit reached.
}
Copy-Item $file -Recurse D:\target
}