PowerShell 基本 条件分岐

if

基本形

if (条件1) {
    条件1に一致した場合の処理
} elseif (条件2) {
    条件1に一致せず、条件2に一致した場合の処理
} else {
    全ての条件に一致しなかった場合の処理
}

条件の記述

$a = 3

if ($a -eq 2) {
    "2"
} elseif ($a -gt 2) {
    "2より大きい"
} else {
    "2より小さい"
}
2より大きい

switch

基本形

switch (比較対象) {
    条件1 { 条件1に一致した場合の処理 }
    条件2 { 
        条件2に一致した場合の処理1
        条件2に一致した場合の処理2
    }
    条件3 { 条件3に一致した場合の処理1; 条件3に一致した場合の処理2 }
    default { 全ての条件に一致しなかった場合の処理 }
}
  • defaultはswitch文の中で1度だけ使用可能
    • defaultの記述位置は最後でなくとも良い (defaultの下に別の条件を記述しても正しく判定される)

条件の記述

$a = 2
$b = 3

switch ($a) {
    1            { "変数 `$a の中身は 1 です" }     # 数値で指定
    "2"          { "変数 `$a の中身は 2 です" }     # 文字列で指定 (この場合、暗黙の型変換により条件に一致する)
    $b           { "変数 `$a の中身は 3 です" }     # 変数で指定
    { $b * 2 }   { "変数 `$a の中身は 4 です" }     # 式で指定
    { $a -ge 5 } { "変数 `$a の中身は 5 以上です" } # 判定式で指定
}

breakによる処理の終了

$a = 2

switch ($a) {
    2 { "1つ目の2" }        # 条件に一致するため実行される
    2 { "2つ目の2"; break } # 条件に一致するため実行される
    2 { "3つ目の2" }        # 既にbreakにてswitch文が終了しているため、評価されない
}

大文字と小文字の区別

$a = "a"

switch -CaseSensitive ($a) {
    "a" { "小文字の a" } #一致する
    "A" { "大文字の A" } #一致しない
}

文字列の完全な比較

$a = "abc"

switch -Exact ($a) {
    "abcd"  { "abcd" }  # 一致しない
    "aabc"  { "aabc" }  # 一致しない
    "aabcd" { "aabcd" } # 一致しない
    "abc"   { "abc" }   # 一致する
}
  • switchの既定の動作が-Exactであるため、あえて指定する必要はあまり無い

正規表現での比較

$a = "192.168.0.1"

switch -Regex ($a) {
    "\d{1,3}`.\d{1,3}`.\d{1,3}`.\d{1,3}" { "192.168.0.1" } # 一致する
}

ワイルドカードでの比較

$a = "abcde"

switch -Wildcard ($a) {
    "ab*"   { "abcde" } #一致する
    "*e"    { "abcde" } #一致する
    "ab?e"  { "abcde" } #一致しない
    "ab??e" { "abcde" } #一致する
}

ファイル内容を対象とする比較

Get-Content -Path test.txt
    1
    2
    3

switch -File test.txt {
    1       { "1" }
    3       { "3" }
    default { "Default" }
}
1
Default
3

トップ   編集 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2011-11-27 (日) 19:57:00 (2399d)