我正在尝试比较两组文件夹,以确定文件和文件夹计数的差异。我找到了一个命令,它将输出我正在寻找的数据,但无法找到将其打印到文件的方法。这是我目前使用的命令:
dir -recurse | ?{ $_.PSIsContainer } | %{ Write-Host $_.FullName (dir $_.FullName | Measure-Object).Count }
这让我获得了所需的数据,但我需要找到一种方法将其打印到文本文件中。任何帮助将不胜感激。
答案 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
关于习语的一些注释:dir
是Get-Childitem
的别名,gci
也是。gci
。使用-Directory
的{{1}}参数是仅列出目录的最佳方式,而不是PSIsContainer
检查。最后,Measure-Object
是不必要的。您可以直接获取文件列表的Count
。
另请参阅PowerShell的发明者
中的Write-Host Considered Harmful