我正在处理的另一个业余问题是脚本。我在从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) }
答案 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