【发布时间】:2012-12-25 13:02:19
【问题描述】:
我试图让Get-ChildItem 检索文件夹的内容,并显示文件夹中每个对象的大小、对象的名称和类型(文件/目录)。但是,我无法仅使这三列起作用。
名称和长度比较简单,但是如何显示文件和文件夹之间的差异?
【问题讨论】:
标签: powershell
我试图让Get-ChildItem 检索文件夹的内容,并显示文件夹中每个对象的大小、对象的名称和类型(文件/目录)。但是,我无法仅使这三列起作用。
名称和长度比较简单,但是如何显示文件和文件夹之间的差异?
【问题讨论】:
标签: powershell
我相信通过获取“模式”信息可以做到这一点。 (见这个答案here)
那么,基本上,Get-ChildItem 命令列出的任何“模式”都以“d”开头。
如果你不想去@Joey的回答,这里是“模式”中6个可能值的实际含义:
无论如何,完整列表是:
d - Directory a - Archive r - Read-only h - Hidden s - System l - Reparse point, symlink, etc.
所以我使用它来输出一个 CSV,然后我将在 excel、我的 Flow 或 SharePoint 中标记文件夹。我使用的命令是:
Get-ChildItem -Recurse | Select-Object DirectoryName, BaseName, Extension, Mode | Export-Csv -Path INSERTPATH\listings.csv -Encoding ascii -NoTypeInformation
希望这对遇到它的人有所帮助。
请注意,这是我第一次以完整的回答意图回答。我相信即使这已经 6 年了,人们在尝试实现相同目标时仍然会发现它很有用。
【讨论】:
检查PSIsContainer 属性。对于文件夹,它设置为 $true,对于文件,它设置为 $false。这是一个例子:
Get-ChildItem | Foreach-Object{
New-Object PSObject -Property @{
Name = $_.Name
SizeMB = if($_.PSIsContainer) { (Get-ChildItem $_.FullName -Recurse | Measure-Object Length -Sum).Sum/1mb } else {$_.Length}
Type = if($_.PSIsContainer) {'Directory'} else {'File'}
}
}
【讨论】:
SizeMB 更改为 Size 并删除文件夹大小计算中的除以 1mb。