在Powershell中切换语句

时间:2014-10-14 15:08:26

标签: powershell

好的我有一部分看起来像这样的脚本。

Switch(GCI $source\*.EDIPROD){
    {(GC $_|Select -first 1).substring(176) -match "^834"}{$_ | ?{$_.Name -match "^.+?\.D(\d{6}).*"} | Rename-Item -NewName {"834Dailyin$($Matches[1]).txt"};Continue}
    {(GC $_|Select -first 1).substring(405) -match "^030"}{$_ | ?{$_.Name -match "^.+?\.D(\d{6}).*"} | Rename-Item -NewName {"834Roster$($Matches[1]).txt"};Continue}
    {(GC $_|Select -first 1).substring(176) -match "^820"}{$_ | ?{$_.Name -match "^.+?\.D(\d{6}).*"} | Rename-Item -NewName {"820Dailyin$($Matches[1]).txt"};Continue}
    {(GC $_|Select -first 1) -match "NO INPUT"}{$_ | ?{$_.Name -match "^.+?\.D(\d{6}).*"} | Rename-Item -NewName {"NOINPUTin$($Matches[1]).txt"};Continue}
    {(GC $_|Select -first 1) -match ""}{$_ | ?{$_.Name -match "^.+?\.D(\d{6}).*"} | Rename-Item -NewName Default {"Could not find 834 or 820 qualifier in file $_"};Continue}
}

我的问题在第一和第二个标准上发挥作用。

所以它没有寻找相同的子字符串值,如果一个文件进来并且在子串176处有一个834,它是否会在它在405列检查^ 030之前得到匹配?

我认为它会首先评估176列,所以也许我应该在第二列中进行两场比赛?或者将第二个移到第一个?你们觉得怎么样?

1 个答案:

答案 0 :(得分:1)

是的,它首先会匹配834,因为这是第一个切换条件。此外,由于您使用continue,因此在834匹配之后,switch语句将不再处理当前文件的任何条件并移动到输入中的下一个文件。因此,如果您想在单个文件中匹配多个条件,请不要使用continue。如果您需要先匹配030,那么请将该条件移动到第一个条件。