2009-02-12 2 views
2

Моя цель - написать сценарий копирования, который перемещает файлы из одного каталога, «d: \ aa1», в «d: \ aa2» до указанного размера другой директории «d: \ bbb». Другими словами ... Я бы хотел, чтобы он копировал все файлы из «d: \ aa1» в «d: \ aa2» до тех пор, пока размер «d: \ aa1» не будет иметь такой же размер или меньше, чем «d: БББ».PowerShell: как вы выполняете суммирование размера папки?

До сих пор я

$lmt = get-childitem d:\bbb | measure-object -property length -sum 
do { get-childitem -path d:\aa1 | move-item -destination "d:\aa2" } while {measure-object {$_.sum -lt $lmt} 

Но, кажется, не работает синтаксис. Как мне это сделать?

ответ

2
Get-ChildItem -path d:\aa1 ` 
| % {if (((Get-ChildItem d:\aa2 ` 
| Measure-Object -Property Length -Sum).Sum + $_.Length) ` 
-lt (Get-ChildItem d:\bbb | Measure-Object -Property Length -Sum).Sum) ` 
{Move-Item $_.FullName d:\aa2}} 
+0

лучше, чем у меня, так как он проверяет общее перед копией. – EBGreen

+0

Я думаю, что вам не хватает _ в $ .length. Я думаю, что это должно быть $ _. – EBGreen

+0

Это текстовое поле «Редактирование текста» длиной $ _. Length, поэтому мне пришлось изменить формат кода. –

0

Там должно быть свойство или метод суммы directory.You можно добавить опции «LS» по мере необходимости для сценария ниже:

rv total; 
foreach ($i in ((ls -Force) | Select Length)) {[int64]$total+=$i[0].Length}; 
$total /1GB; 
Смежные вопросы