1

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

2 回答 2

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
于 2012-08-13T12:21:36.593 回答
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
于 2012-08-16T20:43:21.807 回答