使用switch语句而不是多个IF

时间:2012-08-13 12:02:32

标签: powershell switch-statement

您好我有下面的代码,并想知道使用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"

2 个答案:

答案 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