measure-object 本身不直接统计代码行数,但配合 get-content 可高效统计文本行数;支持单文件总行数、过滤空行/注释行后的有效行数、多文件批量统计及编码兼容性处理。
powershell 的 measure-object 本身不直接统计“代码行数”,但它能高效统计文本行数——只要把源文件按行读入,就能准确算出总行数、空行、带内容的行等。关键在于配合 get-content 和筛选逻辑。
统计单个文件的总行数
最常用也最直接的方式:用 Get-Content 读取文件内容,再通过管道交给 Measure-Object 计数。
-
Get-Content .\script.ps1 | Measure-Object—— 返回行数(Count)、字符数(Characters)、单词数(Words)等,默认按行计数 - 只取行数:加
-Property Line不起作用(Measure-Object对字符串流默认就是按行),更稳妥写法是:(Get-Content .\script.ps1).Count或Get-Content .\script.ps1 | Measure-Object | Select-Object -ExpandProperty Count
过滤空行和注释行后统计有效代码行
真实开发中常需排除空白行和以 # 开头的注释行。PowerShell 可用 Where-Object 预处理:
Get-Content .\script.ps1 | Where-Object { $_.Trim() -ne '' -and $_.Trim() -notmatch '^\s*#' } | Measure-Object | Select-Object Count- 说明:
$_.Trim()去首尾空格;-ne ''排除空行;-notmatch '^\s*#'排除纯空格+#开头的注释行(支持缩进注释)
批量统计多个文件的代码行
用 Get-ChildItem 找到所有 .ps1 文件,再逐个处理:
Get-ChildItem *.ps1 | ForEach-Object { $file = $_; $lines = (Get-Content $file.FullName | Where-Object { $_.Trim() -ne '' -and $_.Trim() -notmatch '^\s*#' }).Count; [PSCustomObject]@{File=$file.Name; Lines=$lines} }- 结果会输出每份脚本的文件名和有效行数;如需汇总总数,末尾加
| Measure-Object -Sum Lines
注意编码与换行符兼容性
若文件含 BOM 或使用 Unix 换行(LF),Get-Content 在旧版 PowerShell(5.1)可能出错或漏行:
- 推荐显式指定编码:
Get-Content .\script.ps1 -Encoding UTF8(或Default/UTF8BOM) - PowerShell Core(7+)默认更健壮,但仍建议统一用
-Encoding参数避免歧义 - 换行符不影响
Measure-Object行计数——它按Get-Content输出的字符串数组元素个数统计,与换行符类型无关











