复制文件,直到超过指定的大小

时间:2015-06-12 09:31:31

标签: powershell filesize get-childitem

我需要将文件复制到文件夹,直到它们超过指定的大小。我已经编写了以下脚本,但它失败并出现以下错误:

  

无法比较" Microsoft.PowerShell.Commands.GenericMeasureInfo"因为它不是IComparable。   在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 个答案:

答案 0 :(得分:2)

在第一次执行循环后,将验证while条件。由于您已经枚举了文件,因此您的脚本将复制所有文件。

如果达到限制,您可以省略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
}