你好,我是 PowerShell 初学者。我正在寻找一个脚本,它可以查找并列出目录 (*.TXT
) 中超过 100 行的所有文本文件。
此代码显示目录中的最大和最小行数,但不列出具有最小或最大行数的文件。
dir . -filter "*.txt" -Recurse -name | foreach{(GC $_).Count} | measure-object -sum -max -min
最佳答案
你们非常接近。您拥有正确的命令行开关 (Measure-Object
);您只需使用 -Line
参数,然后使用 Where-Object
即可。请注意 Select-Object
与 -ExpandProperty
的使用。这就是将 TextMeasureInfo 对象的集合转换为整数集合的原因。这对我有用:
Get-ChildItem . -Filter "*.txt" -Recurse |
Where-Object {
(Get-Content $_.FullName |
Measure-Object -Line |
Select-Object -ExpandProperty Lines) -gt 100
}
如果您想将其放在一行并使用别名,则等效:
dir . -filter "*.txt" -Recurse | ? {(gc $_.FullName | Measure -Line | Select -Expand Lines) -gt 100 }
您还询问了如何查找具有最小和最大行数的文件。我不建议将其写在一行中,因为它变得不可读。为此,您需要在 Where-Object
ScriptBlock 内有一个中间变量:
$minLines = 10
$maxLines = 200
Get-ChildItem . -Filter "*.txt" -Recurse |
Where-Object {
$numLines = Get-Content $_.FullName |
Measure-Object -Line |
Select-Object -ExpandProperty Lines
if (($numLines -gt $minLines) -and ($numLines -lt $maxLines)) {
return $_
}
}
关于使用 PowerShell 列出目录中超过 100 行的所有文本文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24353591/