powershell数组返回意外结果



我有一个对象数组,当我试图过滤它时,它没有返回预期的数据。

数据:

Date           Batch
----           -----
04/08/2008     1
04/08/2008     2
04/08/2008     3
04/08/2008     10
04/08/2008     11
我代码:

$table = @{}
$table = import-csv e:report.csv
Foreach($item in $table.GetEnumerator())
{
    If (($item.date -eq '4/8/2008') -and ($item.batch -le 100) )
    {
        $item
    }
}

我希望它返回所有项目,但我只得到:

Date           Batch
----           -----
04/08/2008     1
04/08/2008     10

我错过了什么?

我错过了什么?

字符串不是数字的事实: -)Import-Csv将所有列值视为字符串,因此您将字符串"3"100进行比较,而不是数字3 -并且按字母顺序,100先于3(第一个字符"1" vs第一个字符"3")。

$item.batch转换为数字类型:

foreach($item in Import-Csv E:report.csv)
{
    If (($item.date -eq '4/8/2008') -and ([int]$item.batch -le 100) )
    {                                      # Look, here
        $item
    }
}

…或者,翻转操作数,使数值引用值(100)为左侧参数:

If (($item.date -eq '4/8/2008') -and (100 -gt $item.batch) )

这将导致PowerShell在比较

之前将$item.batch转换为数值类型

最新更新