我需要计算文本文件中的行数并将其用作循环的循环变量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 行。
$lines = 获取内容-路径 PostBackupCheck-Textfile.txt | 测量-对象-线 | 选择-展开行