2012-11-18 17 views
6

Muszę policzyć liczbę linii w pliku tekstowym i użyć tej zmiennej jako zmiennej pętli dla mojej pętli for. Problemem jest to:Policz linie w pliku i zapisz w zmiennej

$lines = Get-Content -Path PostBackupCheck-Textfile.txt | Measure-Object -Line 

Mimo to nie zwróci liczbę wierszy, zwraca go w takim stanie, że nie można porównać do liczby całkowitej w moim pętli:

for ($i=0; $i -le $lines; $i++) 
    {Write-Host "Line"} 

Odpowiedz

13

Measure-Object zwraca TextMeasureInfo obiektu nie liczbą całkowitą:

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 

informacje chcesz użyć jest przez Lines własność tego obiektu:

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... 

To właściwość zwraca rzeczywistą liczbę całkowitą:

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

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


PS C:\> $lines.Lines 
5 

więc można używać, że w pętli:

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

Na co warto, znalazłem powyższy przykład zwrócił błędną liczbę linii. Znalazłem ten powrócił prawidłową ilość:

$measure = Get-Content c:\yourfile.xyz | Measure-Object 
$lines = $measure.Count 
echo "line count is: ${lines}" 

prawdopodobnie chcesz przetestować obie metody, aby dowiedzieć się, co daje odpowiedź chcesz. Za pomocą "Line" zwrócono 20, a "Count" zwrócono 24. Plik zawierał 24 wiersze.

+1

Podobno własność 'Lines' zawiera liczbę niepustych linii (tj. Linii o długości> 0). Dokumentacja tego nie wspomina. –