【问题标题】:modify result of an if in a foreach loop in an attempted result PowerShell在尝试的结果PowerShell中修改foreach循环中if的结果
【发布时间】:2020-10-24 00:51:12
【问题描述】:

我做了这样的 if 语句

$fin = $list.UF6E8_CANAL -match "ML"
if ($list.UF6E8_CANAL -match "ML"){1}
else {0}

按原样工作,但只要我这样称呼它

write-output "<Index Nom=`"ALERTE_MAIL`" Valeur=`"$fin`"/>"

它变成真或假

有什么想法可以让我得到正确的结果,应该是 1 还是 0?

还有一件事,我的 if 位于循环的开头,他用 1 或 0 回答我

$boucle = foreach ($list in $liste)

{
$fin = $list.UF6E8_CANAL -match "ML"
if ($list.UF6E8_CANAL -match "ML"){1}
else {0}

write-output "       <Index Nom=`"ALERTE_MAIL`" Valeur=`"$fin`"/>"
}

所以当我在循环中引入它时,它会用正确的答案(0 或 1)回答我
但是当我调用变量 $fin 时,它变为真或假(我希望它为 1 或 0)

我也想隐藏第一次调用的结果

有什么想法吗?

【问题讨论】:

  • 您没有将if 的输出分配给任何东西......如果您希望$fin 成为0/1 而不是您需要分配的False/True,它只会进入屏幕它就这样。 PoSh 将强制 $False0$True1,因此您可以使用 [int]$Fin 将该布尔值转换为 int。

标签: powershell loops if-statement boolean


【解决方案1】:

$fin 是布尔类型,所以如果你把它放在一个字符串中,它会被隐式转换为字符串“真”或“假”。您可以使用[int]$fin = $list.UF6E8_CANAL -match "ML",然后在字符串中使用时将其转换为 0 或 1。它也适用于条件语句,因为值 0 将转换回布尔值 false,任何其他值都转换为 true。

【讨论】:

  • 完美谢谢你我知道我做错了所以现在正确的结果出现在我的写输出行中但是在循环的开始我仍然得到了 if 语句出现的结果.有没有办法让 if 语句默默地继续。所以我的结果只会出现在我的写输出中?
  • @HadrienBeaujean 那个 if 语句除了输出 0 或 1 什么都不做。如果你不需要它,只需删除它。
  • 这里是示例 1
  • 我不确定我是否|在这种情况下可以使用 out-null
猜你喜欢
  • 2016-12-24
  • 2014-10-26
  • 2016-01-28
  • 2017-03-10
  • 1970-01-01
  • 1970-01-01
  • 2014-12-05
  • 2021-06-25
  • 2015-05-30
相关资源
最近更新 更多