You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何让Measure-Object正确统计无结尾CRLF文件的行数?

问题原因

Get-Content 默认按照**换行符(CRLF 或 LF)**拆分文件内容,每遇到一个换行符就生成一个数组元素。如果文件最后一行没有结尾换行符,这行内容不会触发拆分逻辑,因此不会被计入数组,导致 Measure-Object 统计的 count 比实际行数少1。

举个实际例子:
文件内容为:

第一行
第二行
第三行

(第三行末尾无换行符)
Get-Content 会返回包含第一行、第二行的数组,count 为2,但实际行数是3。

解决方法

以下几种方式可以确保得到准确的总行数:

方法1:使用 .NET 类库(推荐,效率更高)

直接调用 System.IO.File 的 ReadAllLines 方法,它会正确识别无结尾换行的最后一行,返回的数组长度即为准确行数:

[System.IO.File]::ReadAllLines($file).Length

方法2:结合 -Raw 参数拆分

用 -Raw 读取整个文件为单个字符串,再按兼容多平台的换行符规则拆分后统计:

((Get-Content $file -Raw) -split '\r?\n').Count
  • \r?\n 同时适配 Windows(CRLF)和 Unix(LF)格式的换行符
  • 如果需要排除空文件或末尾空行的影响,可以过滤空字符串:
    ((Get-Content $file -Raw) -split '\r?\n' | Where-Object { $_ -ne '' }).Count
    

方法3:PowerShell 7+ 专属方案

使用 -ReadCount 0 参数一次性读取所有行到数组,直接取数组长度:

(Get-Content $file -ReadCount 0).Count

-ReadCount 0 会强制 Get-Content 将所有行作为一个数组返回,无论最后一行是否有结尾换行符。

内容的提问来源于stack exchange,提问作者Ooker

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.12 14:22:12