テキスト ファイルの行数を数え、これをループのループ変数として使用する必要がありfor
ます。問題はこれです:
$lines = Get-Content -Path PostBackupCheck-Textfile.txt | Measure-Object -Line
これは行数を返しますが、ループ内の整数と比較できない状態で返します。
for ($i=0; $i -le $lines; $i++)
{Write-Host "Line"}
テキスト ファイルの行数を数え、これをループのループ変数として使用する必要がありfor
ます。問題はこれです:
$lines = Get-Content -Path PostBackupCheck-Textfile.txt | Measure-Object -Line
これは行数を返しますが、ループ内の整数と比較できない状態で返します。
for ($i=0; $i -le $lines; $i++)
{Write-Host "Line"}
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
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:\> _
価値があるのは、上記の例が間違った行数を返していることがわかりました。これが正しいカウントを返すことがわかりました:
$measure = Get-Content c:\yourfile.xyz | Measure-Object
$lines = $measure.Count
echo "line count is: ${lines}"
おそらく、両方の方法をテストして、必要な答えが得られる方法を見つけたいと思うでしょう。「Line」を使用すると 20 が返され、「Count」を使用すると 24 が返されました。ファイルには 24 行が含まれていました。