您好我有下面的代码,并想知道使用switch语句替换它的最佳方法。这个例子我有4个可能的结果,但我最终可能会超过20,if语句会变得混乱。
$Des = "C:\tools\"
$DListFiles = Get-ChildItem $Des -EA 0
IF((Test-Path $Des)-ne $false -and $DListFiles -eq $null){$DDE = 1}
ElseIF((Test-Path $Des)-ne $false -and $DListFiles -ne $null){$DDE = 2}
ElseIF((Test-Path $Des)-eq $false){$DDE = 3}
Else{$DDE = 4}
write-host "$DDE"
答案 0 :(得分:4)
对于您发布的示例,我个人会使用嵌套if来使逻辑更清晰:
If(Test-Path $Des){
If($DListFiles -eq $null){
$DDE = 1
}Else{
$DDE = 2
}
}Else{
If($DListFiles -eq $null){
$DDE = 3
}else{
$DDE = 4
}
}
顺便说一句,你写它的方式并没有给出我认为你想要的逻辑。我不相信你会得到$ DDE = 2.如果我正在阅读你正确发布的内容,逻辑表将在下面发布。同样,嵌套的If会帮助解决它。
Test-Path $Dlist is Null $DDE
TRUE TRUE 1
FALSE FALSE 3
TRUE TRUE 4
FALSE FALSE 3
答案 1 :(得分:1)
我最终想出了一些有用的东西让我知道你们都在想什么。
$Des = "c:\test\"
$DListFiles = Get-ChildItem $Des -EA 0
Switch($Des)
{ {!$Des} {$DDE = 4; break}
{((Test-Path $Des)-ne $false -and $DListFiles -eq $null)} {$DDE = 1; break}
{((Test-Path $Des)-ne $false -and $DListFiles -ne $null)} {$DDE = 2; break}
{((Test-Path $Des)-eq $false)} {$DDE = 3; break}
}
$DDE