powershell数组返回意外结果

powershell数组返回意外结果,powershell,Powershell,我有一个对象数组,当我尝试过滤数据时,它没有按预期返回数据 数据: 我的代码: $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

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

数据:

我的代码:

$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”
与第一个字符
“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
转换为数字类型

我错过了什么

字符串不是数字这一事实:-)

Import Csv
将所有列值视为字符串,因此您将比较字符串
“3”
100
,而不是数字
3
——并且按字母顺序,
100
3
之前(第一个字符
“1”
与第一个字符
“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
转换为数字类型

从CSV读取时,所有值都是字符串。如果要进行数字比较,则需要数字类型。您可以简单地强制转换-->
[int]$item.batch-le 100
。另一种选择是让左侧为您想要的数据类型-->
100-ge$item.batch
当您从CSV读取时,所有值都是字符串。如果要进行数字比较,则需要数字类型。您可以简单地强制转换-->
[int]$item.batch-le 100
。另一种选择是让左边是您想要的数据类型-->
100-ge$item.batch
我知道这是一件我忽略的简单事情!非常感谢。我知道我忽略了一件简单的事情!非常感谢。