我有这个代码,但它无法正常工作
$minLines = 1
$maxLines = 1000
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 $_
}
}
我在一个目录中有数百个文本文件,其中一些有超过700行,有些只有4或5.有时最小或最大标准符合数十个具有相同行数的文件。我想首先列出文件或文件最小行数和文件或文件(如果多于一行),最大行数。
可能首先在$ minLines和$ maxLines中存储shuld以某种方式存储目录的所有文本文件的最大和最小行数,然后列出匹配最小行数和最大行数的文件。
我也找到了这段代码:
dir . -filter "*.txt" -Recurse -name | foreach{(GC $_).Count} | measure-object -max -min
它也可以有用。此代码为我们提供有关文件夹中最大和最小行数的信息。
答案 0 :(得分:1)
你可以选择像这样的单线:
Get-ChildItem . *.txt -Recurse | Select FullName, @{n="NumLines";e={(gc $_).count}} |
Sort NumLines | Group NumLines | Select -First 1 -Last 1
要查看每个文件的全名:
Get-ChildItem . *.ps1 -Recurse | Select FullName, @{n="NumLines";e={(gc $_).count}} |
Sort NumLines | Group NumLines | Select -First 1 -Last 1 -ExpandProperty Group
答案 1 :(得分:0)
这将设置最小值和最大值:
Get-ChildItem C:\Users\Public\Documents\Test\ | % {
$lines = (Get-Content $_.FullName).Count
if (($min -eq $null) -and ($max -eq $null)) {
$min=$lines
$max=$lines
}
if ($lines -lt $min) {
$min=$lines
}
if ($lines -gt $max) {
$max=$lines
}
}
这将获得具有最大行数的文件:
Get-ChildItem C:\Users\Public\Documents\Test\ | ? {(Get-Content $_.FullName).Count -eq $max}
这将获得最小的文件:
Get-ChildItem C:\Users\Public\Documents\Test\ | ? {(Get-Content $_.FullName).Count -eq $min}
如果您想要文件名和行数,可以将其附加到最大行或稍微修改以获得最小值:
| % {("File " + $_.FullName + " has " + $max + "lines.")}
通过此,您可以使用Out-File
将其转换为.txt文件。
| Out-File C:\max_lines.txt