2015-05-29 73 views
1

我想比较两组文件夹以确定文件和文件夹数量的差异。我找到了一个将输出我正在查找的数据的命令,但找不到将其打印到文件的方法。这里是我目前使用的命令:在PowerShell中打印递归文件和文件夹计数?

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

这让我所需要的数据,但我需要找到一个方法来打印这一个文本文件。任何帮助将不胜感激。

回答

3

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

这里是您的代码重写为输出一个字符串到管道,而不是使用写主机。这使用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参数是仅列出目录的最佳方式,而不是PSIsContainer检查。最后,Measure-Object是不必要的。您可以直接使用文件列表的Count

Write-Host Considered Harmful请参阅从PowerShell中

的发明者
相关问题