将脚本结果导出为CSV

时间:2018-05-15 22:20:47

标签: powershell

我一直在搜索一个只列出共享中文件夹及其大小的脚本。我找到了以下内容但是我已经挂断了如何将我看到的输出导出为易于阅读的CSV。令我惊讶的是,如此简单的事情变成了困难的事情。建议欢迎!

$colItems = Get-ChildItem "C:\Users\user.name\Desktop" | Where-Object {$_.PSIsContainer -eq $true} | Sort-Object
foreach ($i in $colItems)
{
    $subFolderItems = Get-ChildItem $i.FullName -recurse -force | Where-Object {$_.PSIsContainer -eq $false} | Measure-Object -property Length -sum | Select-Object Sum
    $i.FullName + " -- " + "{0:N2}" -f ($subFolderItems.sum / 1MB) + " MB"

}

6 个答案:

答案 0 :(得分:2)

根据您的脚本:

## C:\Users\UserName\Desktop\Test\SO_50359947.ps1
$colItems = Get-ChildItem "$($Env:USERPROFILE)\Desktop" |
    Where-Object {$_.PSIsContainer} | Sort-Object

$data = ForEach ($i in $colItems){
    $subFolderItems = Get-ChildItem $i.FullName -recurse -force -ea 0|
        Where-Object {!$_.PSIsContainer} |
            Measure-Object -Property Length -sum | Select-Object Sum
    [PSCustomObject]@{
        Folder = $i.FullName
        Size = "{0,10:N2} MB" -f ($subFolderItems.sum / 1MB)
    }
}
$data

#$data | Export-Csv "$($Env:USERPROFILE)\Desktop\your.csv" -NoType

示例输出(在另一棵树上)

> $data

Folder          Size
------          ----
Q:\test\2018\03       0,37 MB
Q:\test\2018\04       0,83 MB
Q:\test\2018\05     383,57 MB

取消注释要写入csv文件的最后一行。

答案 1 :(得分:0)

以下是使用自定义对象的一种方法:

Get-ChildItem "$home\Desktop" -Directory |
    ForEach-Object {
        $contents = Get-ChildItem -Path $_.FullName -Recurse
        [PsCustomObject]@{
            FolderName = $_.Name
            SizeMB = [Math]::Round(($contents | Where-Object PsIsContainer -eq $false | Measure-Object -property Length -Sum).Sum / 1MB,2)
            SubFolders = ($contents | Where-Object PsIsContainer -eq $true | Measure-Object).Count
            Files = ($contents | Where-Object PsIsContainer -eq $false | Measure-Object).Count
        }
    }

这样输出如下:

FolderName   SizeMB SubFolders Files
----------   ------ ---------- -----
Folder1      438.38         19   124
Folder2    34925.72        306  3779

要将其发送到CSV,只需在最后一个括号后附加以下内容:

| Export-Csv "$home\Desktop\Folders.csv" -NoTypeInformation

答案 2 :(得分:0)

有几种方法可以做到这一点,但我认为最简单的方法就是使用Add-Member简单地将该信息添加到项目中。然后通过Export-Csv输出所需的数据。

$colItems = Get-ChildItem "C:\Users\user.name\Desktop" | 
    Where-Object {$_.PSIsContainer -eq $true} | 
    Sort-Object | 
    %{ Add-Member -InputObject $_ -NotePropertyName 'FolderSize' -NotePropertyValue (Get-ChildItem $_.FullName -recurse -force | Where-Object {$_.PSIsContainer -eq $false} | Measure-Object -property Length -sum | Select-Object -ExpandProperty Sum) -PassThru}

$colItems | Select FullName,FolderSize | Export-Csv -NoType

答案 3 :(得分:0)

从桌面/任何位置获取所有文件详细信息并创建excel

后,请分配给某个变量
$subFolderItems = Get-ChildItem "$home\Desktop" -Directory |
    ForEach-Object {
        $contents = Get-ChildItem -Path $_.FullName -Recurse
        [PsCustomObject]@{
            FolderName = $_.Name
            SizeMB = [Math]::Round(($contents | Where-Object PsIsContainer -eq $false | Measure-Object -property Length -Sum).Sum / 1MB,2)
            SubFolders = ($contents | Where-Object PsIsContainer -eq $true | Measure-Object).Count
            Files = ($contents | Where-Object PsIsContainer -eq $false | Measure-Object).Count
        }
    }

$subFolderItems | out-file C:\Users\thiyagu.a.selvaraj\Desktop\PowerShell\FileSizeOutput.xls 

答案 4 :(得分:-1)

在我看来,使用CSV作为你的用例并不是最好的计划,因为(在我的文件夹中)有超过1000 MB的文件,所以csv会分解一些文件大小。要制作制表符分隔文件(大多数系统都可以轻松解析),只需修改脚本输出字符串即可。

我将 - 更改为制表符,并在行的末尾添加了输出

"{0}`t{1:N2} MB" -f $i.fullname,($subFolderItems.sum / 1MB) >> output.csv

最终的剧本如下;您可能需要将output.csv更改为您喜欢的输出文件位置。

$colItems = Get-ChildItem "C:\Users\user.name\Desktop" | Where-Object {$_.PSIsContainer -eq $true} | Sort-Object
foreach ($i in $colItems)
{
    $subFolderItems = Get-ChildItem $i.FullName -recurse -force | Where-Object {$_.PSIsContainer -eq $false} | Measure-Object -property Length -sum | Select-Object Sum
    "{0}`t{1:N2} MB" -f $i.fullname,($subFolderItems.sum / 1MB) >> output.csv
}

答案 5 :(得分:-3)

如果你不坚持使用纯PowerShell,在Windows 10(足够新)上你可以调用bash:

+7            <- Modification
74  75  74
J   K   J     <- New Text

要显示它如何影响生成的csv,请使用更长的示例:

bash -c "du -h | sed 's/\s\+/,/'"