如何在Powershell中比较文件夹大小

时间:2015-07-23 10:01:05

标签: windows powershell

如果文件夹大小大于或等于600MB,我必须应用命令。

我试过这样的事情

#include <map>
#include <set>
#include <utility>

typedef struct d_o_pair
{
    int d_number;
    int o_number;
    bool operator <( const d_o_pair &rhs ) const
    {
        return d_number < rhs.d_number || ( !( rhs.d_number < d_number ) && ( o_number < rhs.o_number ) );
    }        
} d_o_pair;

typedef std::set<d_o_pair> d_o_set;

int main()
{
    std::map<int, d_o_set> my_map;
    my_map[5].insert( { 0, 2 } );
}

它不起作用。它写入文件夹的正确大小但不遵守IF语句。我该怎么办?

2 个答案:

答案 0 :(得分:2)

最简单的方法是使用FileSystemObject COM对象:

function Get-FolderSize($path) {
  (New-Object -COM 'Scripting.FileSystemObject').GetFolder($path).Size
}

但我建议不要在Get-Size函数中进行格式化。通常最好让函数返回原始大小,并在实际显示值时进行计算和格式化。

像这样使用:

Get-ChildItem 'D:\home' | ? { $_.PSIsContainer -and Get-FolderSize $_.FullName -gt 600MB }

或者像这样:

Get-ChildItem 'D:\home' | ? { $_.PSIsContainer } | % {
  if (Get-FolderSize $_.FullName -gt 600MB) {
    'Not OK.'
  } else {
    'OK template.'
  }
}

在PowerShell v3及更新版本上,您可以使用Get-ChildItem -Directory代替Get-ChildItem | ? { $_.PSIsContainer }

答案 1 :(得分:0)

使用$ size -gt&#34; 600&#34;进行比较时该值被视为字符串。因此没有得到正确的结果。

尝试使用整数进行比较。