在PowerShell中打印递归文件和文件夹计数?

时间:2015-05-29 21:46:55

标签: powershell

我正在尝试比较两组文件夹,以确定文件和文件夹计数的差异。我找到了一个命令,它将输出我正在寻找的数据,但无法找到将其打印到文件的方法。这是我目前使用的命令:

dir -recurse |  ?{ $_.PSIsContainer } | %{ Write-Host $_.FullName (dir $_.FullName | Measure-Object).Count }

这让我获得了所需的数据,但我需要找到一种方法将其打印到文本文件中。任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:3)

问题是Write-Host cmdlet的使用,它几乎绕过了所有管道处理。在这种情况下,它也是不必要的,因为cmdlet未使用的任何输出都会自动传递到管道中(如果没有进一步的话,则会传递到控制台)。

这是您重写的代码,用于将字符串输出到管道而不是使用Write-Host。这使用PowerShell的字符串子表达式运算符$()。在控制台上,它看起来是一样的,但它可以通过管道传输到文件或其他cmdlet。

gci -Recurse -Directory | %{ "$($_.FullName) $((gci $_.FullName).Count)" }

您可能还发现将数据放入PSCustomObject很有用。获得对象后,您可以根据计数进行进一步处理,例如排序或过滤。

$folders = gci -Recurse -Directory | %{ [PSCustomObject]@{Name=$_.FullName; Count=(dir $_.FullName).Count }}

$folders | sort Count
$folders | where Count -ne 0

关于习语的一些注释:dirGet-Childitem的别名,gci也是。gci。使用-Directory的{​​{1}}参数是仅列出目录的最佳方式,而不是PSIsContainer检查。最后,Measure-Object是不必要的。您可以直接获取文件列表的Count

另请参阅PowerShell的发明者

中的Write-Host Considered Harmful