gpt4 book ai didi

powershell - If 语句在它应该的时候从不评估 false

转载 作者:行者123 更新时间:2023-12-02 22:55:58 25 4
gpt4 key购买 nike

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

我已经尝试过exitexit()$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) }

最佳答案

下面的语句并没有按照您的想法行事。

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

这里的问题是这里测试了两个单独的语句,您可能不会想到 $confirm -eq "Y""y"。后者会将其自身评估为真,因为它是一个非空非空字符串。

考虑这个单独的语句 [bool]"y",它会返回 True

所以你想写的是 $confirm -eq "Y"-or $confirm -eq "y"。然而这是多余的since -eq is case-insensitive by default .所以 $confirm -eq "Y" 本身就足够了。

额外的阅读内容是关于如何 about_Logical_Operators工作。它有一些关于如何链接多重比较的简单示例。说左侧的评估独立于右侧是不正确的。

The PowerShell logical operators evaluate only the statements required to determine the truth value of the statement. If the left operand in a statement that contains the and operator is FALSE, the right operand is not evaluated. If the left operand in a statement that contains the or statement is TRUE, the right operand is not evaluated.

在您的代码中输入任何字母或值都无效,因为 -or "y" 始终为真。在更新后的答案中输入任何非 y 值将使 $confirm -eq "y" 返回 False


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

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

其中 Y=Yes,M=Maybe 和 B=Bagel

关于powershell - If 语句在它应该的时候从不评估 false,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53101502/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com