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的主要内容,如果未能解决你的问题,请参考以下文章
SQL中的case when then else end用法