好的我有一部分看起来像这样的脚本。
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列,所以也许我应该在第二列中进行两场比赛?或者将第二个移到第一个?你们觉得怎么样?
答案 0 :(得分:1)
是的,它首先会匹配834,因为这是第一个切换条件。此外,由于您使用continue
,因此在834匹配之后,switch语句将不再处理当前文件的任何条件并移动到输入中的下一个文件。因此,如果您想在单个文件中匹配多个条件,请不要使用continue
。如果您需要先匹配030,那么请将该条件移动到第一个条件。