2012-11-18 27 views
6

テキストファイルの行数を数え、これを私のforループのループ変数として使用する必要があります。ファイル内の行数を変数に格納

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

これは行数を返すないが、それは私のループ内の整数と比較することができない状態でそれを返す:このされ問題

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

答えて

13

Measure-ObjectTextMeasureInfoオブジェクトを返し、ない整数:

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 

使用したい情報が0で提供されますそのオブジェクトのプロパティ:

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

プロパティは、実際の整数を返すこと:

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

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


PS C:\> $lines.Lines 
5 

ので、あなたのループ内でそれを使用することができます:それは価値がある何のため

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

を、私が見つけました上記の例は間違った行数を返しました。あなたはおそらくあなたが望む答えを与えるかを把握するために、両方のメソッドをテストしたい

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

:私はこれが正しい数を返されました。 "Line"を使用して20が返され、 "Count"が24を返しました。ファイルには24行が含まれていました。

+1

「Lines」プロパティには、空でない行(つまり、長さ> 0の行)の数が含まれているようです。しかし、ドキュメンテーションはこれについて言及していない。 –

関連する問題