如何在PowerShell的switch语句中修改匹配值后继续匹配?
PowerShell Switch 实现修改变量后重新匹配分支的解决方法
PowerShell 的 switch 语句默认仅基于初始传入的值进行分支匹配,执行完匹配的分支后就会退出整个 switch 块,不会自动重新评估修改后的变量值——这就是你提供的代码只执行0分支的核心原因。要实现修改变量后让后续分支继续匹配的效果,无法通过原生 switch 的参数实现,推荐用循环包裹 switch 的方式解决:
解决方法:循环包裹 Switch
使用 do-while 循环每次将更新后的变量传入 switch,直到触发退出条件:
$varInt = 0 do { switch ($varInt) { 0 { Write-Host "It's zero. Incrementing to one." $varInt++ } 1 { Write-Host "Incremented to one. Moving to two." $varInt++ } 2 { Write-Host "Incremented to two, exiting" } } } while ($varInt -lt 2) Write-Host "Final counter is $varInt"
执行流程说明
- 首次循环:
$varInt为0,匹配0的分支,执行后变量变为1 - 检查循环条件
$varInt -lt 2成立,进入第二次循环 - 第二次循环:
$varInt为1,匹配1的分支,执行后变量变为2 - 检查循环条件不成立,退出循环
- 最后输出最终变量值
执行后会得到你预期的输出:
- It's zero. Incrementing to one.
- Incremented to one. Moving to two.
- Incremented to two, exiting
- Final counter is 2
内容的提问来源于stack exchange,提问作者seagull
相关产品推荐
相关产品推荐

