PowerShell 比较麻烦,无法进行复合比较
PowerShell Comparison Trouble, can't make compound comparisons
我在进行复合比较时遇到问题。我没有成功使用-ne 或-or。以下是我认为它应该如何工作:
If (($Var -ne 'Y') -or ($Var -ne 'N') {
#Logic for error message and loop back to user promt
Else { #Go to another function }
现在,当我尝试这个时,无论我输入什么,我都会转到我的错误消息,因为它循环回到用户提示,它只是一个无限循环。即使我输入了Y或N,我也去报错
现在我将该代码分解为以下代码,并且可以正常工作,但我更愿意进行复合比较,其中如果变量既不是 "y" 也不是 "n",出错(这是因为输入 Y 和 N 都将脚本推进到我代码的同一部分)。
If ($Var -eq 'Y') {
#Do action 1
}
ElseIf ($Var -eq 'N') {
#Do action 1
}
Else {
#Give error message and loop back to prompt
}
If (($Var -ne 'Y') -or ($Var -ne 'N')) {
这将永远是正确的。我想你想在这里做一个“-and”。
如果你试试这个:
$Var = "1"
If (($Var -ne 'Y') -and ($Var -ne 'N')) {
#Logic for error message and loop back to user promt
"ne Y or ne N"
}
Else { #Go to another function
"else"
}
它应该打印 else
If (($Var -ne 'Y') -or ($Var -ne 'N')) {
#Logic for error message and loop back to user promt
Else { #Go to another function }
这永远行不通,因为两者之一永远为真,而您使用的是 -or。确实有一百万种方法可以解决这个问题,但是鉴于您所展示的内容并推断您给出了一个多步骤过程,这就是我要做的:
$step1complete = $false
Write-Host "Some question"
do {
$var = Read-Host -Prompt "Enter Y or N"
if ($var -in @('Y','N')) {
$step1complete = $true
}
else {
Write-Host "Invalid option!"
}
} until ($step1complete)
我在进行复合比较时遇到问题。我没有成功使用-ne 或-or。以下是我认为它应该如何工作:
If (($Var -ne 'Y') -or ($Var -ne 'N') {
#Logic for error message and loop back to user promt
Else { #Go to another function }
现在,当我尝试这个时,无论我输入什么,我都会转到我的错误消息,因为它循环回到用户提示,它只是一个无限循环。即使我输入了Y或N,我也去报错
现在我将该代码分解为以下代码,并且可以正常工作,但我更愿意进行复合比较,其中如果变量既不是 "y" 也不是 "n",出错(这是因为输入 Y 和 N 都将脚本推进到我代码的同一部分)。
If ($Var -eq 'Y') {
#Do action 1
}
ElseIf ($Var -eq 'N') {
#Do action 1
}
Else {
#Give error message and loop back to prompt
}
If (($Var -ne 'Y') -or ($Var -ne 'N')) {
这将永远是正确的。我想你想在这里做一个“-and”。
如果你试试这个:
$Var = "1"
If (($Var -ne 'Y') -and ($Var -ne 'N')) {
#Logic for error message and loop back to user promt
"ne Y or ne N"
}
Else { #Go to another function
"else"
}
它应该打印 else
If (($Var -ne 'Y') -or ($Var -ne 'N')) {
#Logic for error message and loop back to user promt
Else { #Go to another function }
这永远行不通,因为两者之一永远为真,而您使用的是 -or。确实有一百万种方法可以解决这个问题,但是鉴于您所展示的内容并推断您给出了一个多步骤过程,这就是我要做的:
$step1complete = $false
Write-Host "Some question"
do {
$var = Read-Host -Prompt "Enter Y or N"
if ($var -in @('Y','N')) {
$step1complete = $true
}
else {
Write-Host "Invalid option!"
}
} until ($step1complete)