如果语句在什么时候不应该评估为假

时间:2018-11-01 12:42:31

标签: powershell if-statement

我正在处理的另一个业余问题是脚本。我在从If语句中退出脚本和控制台时遇到问题。

我在exit部分中尝试了exit()$host.exit[Environment]::Exit(1)Else。无论用户输入什么,if语句都会继续。

我觉得我缺少一些非常简单的东西,但我无法弄清楚。如果用户输入“ Y”或“ y”,我只希望它继续。我只是想让它失败然后关闭...

在用户输入确保它捕获了正确的字母后,我也叫$confirm

这是脚本中失败的部分:

$confirm = Read-Host "Continue deletion? [Y/N]"

if ($confirm -eq "Y" -or "y") {
    for ($i = 0; $i -le 4; $i++) {
        Get-ChildItem -Path $path0, $path1 -Filter "$dval*"| 
        % { Write-Host 'Deleting' $_.FullName $dval; Remove-Item $_.FullName -Recurse }
        $dval++ } 

} else { [Environment]::Exit(1) }

1 个答案:

答案 0 :(得分:7)

以下陈述并未按照您认为的去做。

if ($confirm -eq "Y" -or "y")

这里的问题是,这里有两个单独的语句正在测试,您可能不会期望$confirm -eq "Y""y"。由于后者是一个非空的非null字符串,因此后者将自己评估为true。

考虑此孤独的语句[bool]"y",该语句将返回True

所以您要写的是$confirm -eq "Y" -or $confirm -eq "y"。但是,这是多余的since -eq is case-insensitive by default。因此$confirm -eq "Y"本身就足够了。

其他内容将与about_Logical_Operators的工作方式有关。它有一些有关如何链接多个比较的简单示例。说左侧独立于右侧而进行评估将是不正确的。

  

PowerShell逻辑运算符仅评估确定语句真值所需的语句。如果包含and运算符的语句中的左操作数为FALSE,则不评估右操作数。如果包含or语句的语句中的左操作数为TRUE,则不计算右操作数。

由于-or "y"始终为true,因此输入任何字母或值对您的代码均无效。输入具有更新后答案的任何非y值将使$confirm -eq "y"返回False


如果有理由评估多种不同的可能性,则可以查看-contains-in。我将留给您进一步研究(保持切线不变)

$confirm -in "y","m","b"

其中Y =是,M =可能是B = Bagel