列出文件夹中包含最大行数的.txt文件(文件),然后列出行数最少的txt文件(文件)

时间:2014-06-23 20:02:00

标签: powershell

我有这个代码,但它无法正常工作

$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

它也可以有用。此代码为我们提供有关文件夹中最大和最小行数的信息。

2 个答案:

答案 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