【问题标题】:How to use an array variable as an argument in a powershell if statement如何在powershell if语句中使用数组变量作为参数
【发布时间】:2018-01-19 02:08:28
【问题描述】:

作为修改 CSV 脚本的一部分,我正在检查列 subCatDesc 以根据存储在数组中的预定值确定 Team。 p>

$grocerySubTeams = "Grocery","Frozen","Bulk","Dairy"

function identifyTeam() {
foreach ($row in $csv) {
    if ($row.subCatDesc -contains $grocerySubTeams) {
        $row.team = "Grocery"
    }
  }
}

使用此运行脚本时,Team 列保持为空。但是,如果我在下面明确说明我想要的内容,它会起作用。

function identifyTeam() {
foreach ($row in $csv) {
    if (($row.subCatDesc -like "Grocery") -or ($row.subCatDesc -like "Frozen") -or ($row.subCatDesc -like "Bulk") -or ($row.subCatDesc -like "Dairy")) {
        $row.team = "Grocery"
    }
  }
}

我尝试了针对数组而不是 -contains 的不同比较运算符,但没有任何效果。

【问题讨论】:

  • 您是想将一项与多项进行比较,还是将多项与一项进行比较?
  • 尝试-in,代替-contains
  • 所以列 subCatDesc 可以是 GroceryBulkFrozen乳制品。如果它与这 4 个项目中的任何一个匹配,则应将列 Team 设置为 Grocery。这对你来说清楚了吗?
  • Mark Wragg 的建议修复了它。谢谢。
  • @BryceJenkins Get-Help about_Comparison_Operators -ShowWindow-in 是一对多,-contains 是它的倒数

标签: arrays powershell csv data-manipulation


【解决方案1】:

反过来说:

  $grocerySubTeams -contains $row.subCatDesc

【讨论】:

  • 实际上只是将比较运算符从 -contains 切换到 -in 就像 Mark Wragg 建议的那样解决了它,因为我正在比较 $row 的值.subCatDesc 到 $grocerySubTeams 的预定义数组。
【解决方案2】:

Mark Wragg 在将比较运算符切换为 -in 的初始 cmets 中给出的答案解决了我所看到的行为。

if ($row.subCatDesc -in $grocerySubTeams) {

是将单元格的单个值与数组的许多项进行比较的正确语法。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-07-23
    • 1970-01-01
    • 2018-04-24
    • 2017-09-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多