约 1985 字

约 10 分钟

#条件语句

#简介

条件语句用于根据不同的情况执行不同的代码。PowerShell 提供 if/elseif/else 和 switch 两种主要形式,PowerShell 7 还支持简洁的三元运算符。

#if / elseif / else

基本语法:

if (条件) {
    语句
}
elseif (其他条件) {
    语句
}
else {
    语句
}

示例:

> $score = 85
> if ($score -ge 90) {
>>     "优秀"
>> }
>> elseif ($score -ge 60) {
>>     "及格"
>> }
>> else {
>>     "不及格"
>> }
及格

条件表达式可以使用比较运算符、逻辑运算符和命令执行结果:

if (Test-Path ./config.json) {
    Write-Output "配置文件存在"
}

#switch

switch 会依次匹配每个条件,默认使用不区分大小写的精确匹配:

> $color = "green"
> switch ($color) {
>>     "red"   { "stop" }
>>     "green" { "go" }
>>     default { "unknown" }
>> }
go
  • default 在没有其他条件匹配时执行。
  • 与 break 类似,switch 默认会继续检查后续条件;使用 break 可以跳出。

#通配符匹配

使用 -Wildcard 让条件支持 * 和 ?:

> switch -Wildcard ("report.txt") {
>>     "*.txt" { "文本文件" }
>>     "*.csv" { "表格文件" }
>> }
文本文件

#正则匹配

使用 -Regex 让条件按正则表达式匹配:

> switch -Regex ("abc123") {
>>     "^\d+$"    { "纯数字" }
>>     "[a-z]+\d+" { "字母加数字" }
>> }
字母加数字

#区分大小写

使用 -CaseSensitive 区分大小写:

> switch -CaseSensitive ("ABC") {
>>     "abc" { "匹配" }
>>     default { "不匹配" }
>> }
不匹配

#break 与 continue

在 switch 中,break 跳出整个 switch,continue 跳过当前匹配继续下一个:

> switch -Wildcard ("a.txt") {
>>     "*.txt" { "文本"; continue }
>>     "a*"    { "以 a 开头" }
>> }
文本
以 a 开头

#三元运算符

PowerShell 7 支持三元运算符,适合简单的二选一赋值:

> $age = 20
> $result = $age -ge 18 ? "adult" : "minor"
> $result
adult

三元运算符也可以嵌套,但可读性较差时建议仍使用 if。

#推荐阅读

更新: 2026/11/2

作者: planc

创建: 2026/11/2