PowerShell中的Case Else

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了PowerShell中的Case Else相关的知识,希望对你有一定的参考价值。

我正在将VBScript转换为PowerShell,我遇到了Select Case的问题。我正试图找到一种做Case Else的方法。

switch($IncomingText.SubString(0,1)) {
    "1" {
        switch($IncomingText.SubString(12,3)) {
            "601" {
                $TempString = ($IncomingText.SubString(0,75))

                if (RemoveSpaces($IncomingText.SubString(75,10)) = True) {
                    $TempString = $TempString + (StrReverse($IncomingText.SubString(75,10))) + ($IncomingText.SubString(85,10))
                } else {
                    $TempString = $TempString + ($IncomingText.SubString(75,20))
                }
                return $TempString

                Case Else
                if (RemoveSpaces($IncomingText.SubString(155,10)) = True) {
                    $TempString = $TempString + (StrReverse($IncomingText.SubString(155,10))) + ($IncomingText.SubString(165))
                } else {
                    $TempString = $TempString + ($IncomingText.SubString(155))
                }
                return $TempString
            }
        }
    }
}

在VBScript中有这个Case Else。我想留在“601”并继续下一部分。我如何在PowerShell中执行此操作?因为Case Else似乎不适合我。

答案

取自Windows Powershell网站https://technet.microsoft.com/en-us/library/ff730937.aspx

所以使用默认而不是case else。

$a = 5
switch ($a) 
{ 
    1 {"The color is red."} 
    2 {"The color is blue."} 
    3 {"The color is green."} 
    4 {"The color is yellow."} 
    5 {"The color is orange."} 
    6 {"The color is purple."} 
    7 {"The color is pink."}
    8 {"The color is brown."} 
    default {"The color could not be determined."}
}
另一答案

您正在寻找default

Switch ($something) {
   1 { .. }
   2 { .. }
   default { .. }
}
另一答案

我想指出,Switch命令将评估类似于If语句的脚本块,因此您可以创建更复杂的案例:

switch($IncomingText) {
    {$_.SubString(0,1) -eq '1' -and $IncomingText.SubString(12,3) -eq '601'} 
                {
                    $TempString = $IncomingText.SubString(0,75)

                    if (![string]::IsNullOrWhiteSpace($IncomingText.SubString(75,10))) {
                        $TempString = $TempString + (StrReverse($IncomingText.SubString(75,10))) + ($IncomingText.SubString(85,10))
                    } else {
                        $TempString = $TempString + ($IncomingText.SubString(75,20))
                    }
                }

     default    
                {
                    if (RemoveSpaces($IncomingText.SubString(155,10)) = True) {
                        $TempString = $TempString + (StrReverse($IncomingText.SubString(155,10))) + ($IncomingText.SubString(165))
                    } else {
                        $TempString = $TempString + ($IncomingText.SubString(155))
                    }
                    return $TempString
                }
}

我还要注意,看起来你正在从10个字符的字符串中删除空格,并测试是否有任何遗留。如果你反转这10个字符,然后添加接下来的10个字符,如果不是,你只需按原样添加所有20个字符。我的观点是,如果前10个字符都是空格,那么反转它们是无害的,所以你也可以一直反转它们。考虑到这一点,您的代码变得更加简单:

Function StrReverse ($MyString){
    $arrMyString = $MyString.ToCharArray()
    [array]::Reverse($arrMyString)
    $arrMyString -join ''
}

switch($IncomingText) {
    {$_.SubString(0,1) -eq '1' -and $IncomingText.SubString(12,3) -eq '601'} 
                {
                    $TempString = $IncomingText.SubString(0,75) + (StrReverse $IncomingText.SubString(75,10)) + $IncomingText.SubString(85,10)
                }

     default    
                {
                    $TempString + (StrReverse $IncomingText.SubString(155,10)) + $IncomingText.SubString(165)
                }
}

以上是关于PowerShell中的Case Else的主要内容,如果未能解决你的问题,请参考以下文章

mysql中的case when 与if else

Oracle Decode()函数和CASE语句的比较

sql中的case when then else end

SQL中的case when then else end用法

语法SQL中的case when then else end用法-解决一个字段根据条件取不同值

oracle中的case when then else end 用法