计算文件中的行并存储在Variable中

PnP*_*PnP 6 powershell loops for-loop

我需要计算文本文件中的行数,并将其用作循环的循环变量for.问题是:

$lines = Get-Content -Path PostBackupCheck-Textfile.txt  | Measure-Object -Line
Run Code Online (Sandbox Code Playgroud)

虽然这确实返回了行数,但它返回的状态无法与循环中的整数进行比较:

for ($i=0; $i -le $lines; $i++)
    {Write-Host "Line"}
Run Code Online (Sandbox Code Playgroud)

Ans*_*ers 15

Measure-Object返回一个TextMeasureInfo对象,而不是一个整数:

PS C:\> $lines = Get-Content .\foo.txt | Measure-Object -Line
PS C:\> $lines.GetType()

IsPublic IsSerial Name                 BaseType
-------- -------- ----                 --------
True     False    TextMeasureInfo      Microsoft.PowerShell.Commands.MeasureInfo
Run Code Online (Sandbox Code Playgroud)

您要使用的信息由该Lines对象的属性提供:

PS C:\> $lines | Get-Member


   TypeName: Microsoft.PowerShell.Commands.TextMeasureInfo

Name        MemberType Definition
----        ---------- ----------
Equals      Method     bool Equals(System.Object obj)
GetHashCode Method     int GetHashCode()
GetType     Method     type GetType()
ToString    Method     string ToString()
Characters  Property   System.Nullable`1[[System.Int32, mscorlib, Vers...
Lines       Property   System.Nullable`1[[System.Int32, mscorlib, Vers...
Property    Property   System.String Property {get;set;}
Words       Property   System.Nullable`1[[System.Int32, mscorlib, Vers...
Run Code Online (Sandbox Code Playgroud)

该属性返回一个实际的整数:

PS C:\> $lines.Lines.GetType()

IsPublic IsSerial Name                 BaseType
-------- -------- ----                 --------
True     True     Int32                System.ValueType


PS C:\> $lines.Lines
5
Run Code Online (Sandbox Code Playgroud)

所以你可以在循环中使用它:

PS C:\> for ($i = 0; $i -le $lines.Lines; $i++) { echo $i }
0
1
2
3
4
5
PS C:\> _
Run Code Online (Sandbox Code Playgroud)


Tec*_*Sam 5

为了它的价值,我发现上面的例子返回了错误的行数.我发现这返回了正确的计数:

$measure = Get-Content c:\yourfile.xyz | Measure-Object 
$lines = $measure.Count
echo "line count is: ${lines}"
Run Code Online (Sandbox Code Playgroud)

您可能希望测试这两种方法,以找出能够为您提供所需答案的方法.使用"Line"返回20并且"Count"返回24.该文件包含24行.

  • 显然,`Lines` 属性包含非空行的数量(即长度大于 0 的行)。不过,文档没有提到这一点。 (2认同)