Eth*_* K. 2 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) }
Run Code Online (Sandbox Code Playgroud)
以下陈述没有按照您的想法行事.
if ($confirm -eq "Y" -or "y")
Run Code Online (Sandbox Code Playgroud)
这里的问题是,这里有两个单独的语句,你可能没想到$confirm -eq "Y"和"y".后者会将自己的一个评估为真,因为它是一个非空非空字符串.
考虑一下[bool]"y"将要回归的孤独陈述True.
所以你打算写的是$confirm -eq "Y" -or $confirm -eq "y".但是这是多余的,因为-eq默认情况下不区分大小写.所以$confirm -eq "Y"就足够了.
额外的阅读将是关于如何about_Logical_Operators工作.它有一些简单的例子,说明如何进行多重比较.要说左侧独立于右侧进行评估将是不正确的.
PowerShell逻辑运算符仅评估确定语句真值所需的语句.如果包含和运算符的语句中的左操作数为FALSE,则不评估右操作数.如果包含or语句的语句中的左操作数为TRUE,则不评估右操作数.
使用您的代码输入任何字母或值都没有效果,因为-or "y"始终是真的.使用更新的答案输入任何非y值将$confirm -eq "y"返回False
如果有一个理由来评价,你会寻求在多个不同的可能性-contains或-in.我会留给你进一步研究那些(保持切线下降)
$confirm -in "y","m","b"
Run Code Online (Sandbox Code Playgroud)
其中Y =是,M =可能,B =百吉饼
| 归档时间: |
|
| 查看次数: |
45 次 |
| 最近记录: |