Powershell列出了每个循环的文件中的最大数字

时间:2017-11-06 04:49:08

标签: arrays powershell

我用作数组的文件有一个数字列表,我试图通过仅使用foreach循环来显示最大的数字。

我当前的代码检查数组中的每个项目,并将其与当前已知的最大值(最初设置为0)进行比较,然后如果数组中的数字大于当前{$largest值,则更改$largest值。 1}}值。

$largest = 0
$TheFile = Get-Content -path .\number.txt

foreach ($number in $TheFile) {
    if ($number -gt $largest) {
        $largest = $number
    }
}

Write-Host $largest

2 个答案:

答案 0 :(得分:1)

试试这个 -

$TheFile = Get-Content -path .\number.txt
$TheFile | measure -Maximum

PowerShell有一个Measure-Object cmdlet,可帮助您测量数字数组的最大值,最小值,平均值,总和等。请参阅此link

顺便说一下,你的上述逻辑对我来说很好。我没有看到任何错误。你可以做的一件事是在这里设置绝对路径

$TheFile = Get-Content -path \\AbsolutePathOfTheTextFile\number.txt

答案 1 :(得分:0)

所以我决定在我的机器上尝试你的代码,令人惊讶的是,它遇到了你所遇到的同样问题。我正在运行PS 5.0,而不是它很重要,因为答案在于PowerShell的行为方式。

我正在调试此行$number -gt $largest,试图查找其数据类型。

$number.GetType()

IsPublic IsSerial Name                                     BaseType                                                                                                                                                                                              
-------- -------- ----                                     --------                                                                                                                                                                                              
True     True     String                                   System.Object

这让我意识到Powershell不会将$number视为Integer/Double而是string,这就是-gt操作异常行为的原因。我想是这样的,因为源是使用Get-Content读取的,假设输入是字符串。

只需键入强制转换$number应修复此问题,因为这会告诉PowerShell如何将此对象视为。例如,您可以使用[Int]$number[Double]$number(如果您想要考虑浮点数)。

所以您的代码现在变为:

$largest = 0
$TheFile = Get-Content -path .\num.txt
foreach ($number in $TheFile)
{
    if ([Double]$number -gt $largest)
    {
        $largest = $number
    }
}
Write-Host $largest