2013-04-29 56 views
0

即时通讯正在查询我的文档文件夹的大小,但也列出大小的子文件夹并导出到目录。我在网上发现了一些这方面的内容,并试图根据我的需求进行调整,但出口部分存在问题,任何帮助都非常感谢! :查询文件夹树的大小和导出到服务器上的日志

$startFolder = "C:\Users" 

$colItems = (Get-ChildItem $startFolder | Measure-Object -property length -sum) 
"$startFolder -- " + "{0:N2}" -f ($colItems.sum/1MB) + " MB" 

add-content \\server\logs$\DirSize\log.log "$(gc env:computername)" 

$colItems = (Get-ChildItem $startFolder -recurse | Where-Object {$_.PSIsContainer -eq $True} | Sort-Object) 
foreach ($i in $colItems){ 
    { 
     $subFolderItems = (Get-ChildItem $i.FullName | Measure-Object -property length -sum) 
     $i.FullName + " -- " + "{0:N2}" -f ($subFolderItems.sum/1MB) + " MB" | add-content \\server\logs$\DirSize\log.log}} 

现在它是开放的所有文件夹位于C:\用户\“用户”,我可以限制在C只是一个子目录:\用户\“用户”?再次感谢!

回答

3

给这个走:

$log = "C:\logfile.log" 
$startFolder = "C:\Users" 
$colItems = Get-ChildItem $startFolder | Where-Object {$_.PSIsContainer -eq $True} | Sort-Object 
foreach ($i in $colItems){ 
    $itemSum = Get-ChildItem ("$startFolder\" + $i.Name) -recurse | Measure-Object -property length -sum 
    "$startFolder\$i -- " + "{0:N2}" -f ($itemSum.sum/1MB) + " MB" >> $log 
    } 

这将输出的所有文件夹给定的$ startFolder内的大小,并将结果输出到日志文件($日志),这将是这样的:

开始文件:'C:\test'

C:\test\config -- 0.00 MB 
C:\test\docs -- 0.38 MB 
C:\test\files -- 0.03 MB 
C:\test\Help -- 7.28 MB 
C:\test\inbox -- 0.00 MB 
C:\test\install -- 0.00 MB 
C:\test\jobs -- 0.00 MB 

下台2级:

$log = "C:\logfile.log" 
$startFolder = "C:\Users" 
$colItems = Get-ChildItem $startFolder | Where-Object {$_.PSIsContainer -eq $True} | Sort-Object 
foreach ($i in $colItems){ 
    $itemSum = Get-ChildItem ("$startFolder\" + $i.Name) -recurse | Measure-Object -property length -sum 
    "$startFolder\$i -- " + "{0:N2}" -f ($itemSum.sum/1MB) + " MB" >> $log 
    $colItems2 = Get-ChildItem ("$startFolder\" + $i.Name) | Where-Object {$_.PSIsContainer -eq $True} | Sort-Object 
    foreach ($j in $colItems2){ 
     If($j -ne $null){ 
      $itemSum2 = Get-ChildItem ("$startFolder\" + $i.Name +"\"+ $j.Name) -recurse | Measure-Object -property length -sum 
      "-->$startFolder\$i\$j -- " + "{0:N2}" -f ($itemSum2.sum/1MB) + " MB" >> $log 
     } 
    } 
} 
+0

谢谢理查德,我把日志文件改为m y服务器地址和完美的工作。我怎样才能在树上再降一级? – ideq0 2013-04-29 15:24:50

+0

@ ideq0要降低另一个级别,您需要在脚本中添加另一个foreach循环。我已经在上面添加了这个答案。 – Richard 2013-04-29 16:33:55

1

这将递归树的所有子目录,并得到他们的各自的大小:

Param($Path = $(throw "Missing directory") 
,$CSVFile = $(throw "Missing logfile") 
) 

Function GerDirSize($PathDir) 
{ 
    #Gets subdirectories 
    $dirs = Get-ChildItem $PathDir | Where-Object {$_.PsIsContainer} 

    #Check if the list is empty 
    if($dirs -ne $null) 
    { 
     foreach($dir in $dirs) 
     { 
      #Gets size of current directory 
      $itemSum = Get-ChildItem $dir.FullName -recurse | Where-Object {!$_.PsIsContainer} | Measure-Object -Property length -Sum 
      $itemSum = "{0:N2}" -F ($itemSum.sum/1MB) 
      $result = $dir.FullName + ";" + $itemSum 
      Add-Content $CSVFile -Value $result 

      #Gets size of subdirectories 
      GerDirSize($dir.FullName) 
     } 
    } 
} 

GerDirSize $Path 

将它命名为GetDirSize.ps1并使用它,如下所示:

GetDirSize.ps1 "c:\temp" "c:\temp\logfile.log" 

其结果将是:

C:\temp\directory1;10.34 
C:\temp\directory1\subdirectory1;2.07 
C:\temp\directory1\subdirectory1\subsub1;0.00 
C:\temp\directory1\subdirectory2;6.21 
C:\temp\directory1\subdirectory3;0.00 
C:\temp\directory2;4.14 
C:\temp\directory3;10.34 
C:\temp\directory3\subdirectory1;4.14 
C:\temp\directory3\subdirectory1\subdirectory1;2.07 
C:\temp\directory4;0.00