11

テキスト ファイルの行数を数え、これをループのループ変数として使用する必要がありforます。問題はこれです:

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

これは行数を返しますが、ループ内の整数と比較できない状態で返します。

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

3 に答える 3

21

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

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

そのプロパティは実際の整数を返します。

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:\> _
于 2012-11-18T13:50:06.387 に答える
6

価値があるのは、上記の例が間違った行数を返していることがわかりました。これが正しいカウントを返すことがわかりました:

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

おそらく、両方の方法をテストして、必要な答えが得られる方法を見つけたいと思うでしょう。「Line」を使用すると 20 が返され、「Count」を使用すると 24 が返されました。ファイルには 24 行が含まれていました。

于 2015-02-17T20:34:12.460 に答える