主題 about_Split 簡短描述 說明如何使用 split 運算子將一個或多個字串分割為子字串。 完整描述 split 運算子會將一個或多個字串分割為子字串。您可以變更下列分割操作的元素: -- 分隔字元: 預設為空白字元,但是您可以指定字元、字串、模式或指令碼區 塊來指定分隔字元。 -- 子字串數目的上限: 預設為傳回所有子字串。如果您指定的數目少於子字串 的數目,則其餘子字串會串連於最後一個子字串。 -- 指定分隔字元須符合之條件的選項,例如 SimpleMatch 和 Multiline。 語法 下表顯示 -split 運算子的語法。 參數名稱不會出現在命令中,只包含參數值。值必須依照語法圖表中指定的順序出現。 -Split <字串> <字串> -Split <分隔字元>[,<子字串數目上限>[,"<選項>"]] <字串> -Split {<指令碼區塊>} [,<子字串數目上限>] 您可以在任何 split 陳述式中以 -iSplit 或 -cSplit 取代 -split。 -iSplit 和 -split 運算子不區分大小寫。-cSplit 運算子區分大小寫,也就是說, 套用分隔字元規則時應考慮大小寫。 參數 <字串> 指定一個或多個要分割的字串。如果您提交多個字串,則會使用相同的分隔字元 規則分割所有字串。 範例: -split "red yellow blue green" red yellow blue green <分隔字元> 識別子字串結尾的字元。預設分隔字元是空白字元,包括空格和無法列印的字 元,例如新行 (`n) 和 Tab (`t)。當分割字串時,會省略所有子字串中的分隔 字元。範例: "Lastname:FirstName:Address" -split ":" Lastname FirstName Address <子字串數目上限> 指定傳回的子字串數目上限。預設為分隔字元分割的所有子字串。如果有較多的 子字串,則會串連於最後一個子字串。如果子字串較少,則會傳回所有子字串。 0 值和負值會傳回所有子字串。 如果您提交多個字串 (字串陣列) 至 split 運算子,則會分別對每一個字串套用 子字串數目上限。範例: $c = "Mercury,Venus,Earth,Mars,Jupiter,Saturn,Uranus,Neptune" $c -split ",", 5 Mercury Venus Earth Mars Jupiter,Saturn,Uranus,Neptune <指令碼區塊> 指定套用分隔字元之規則的運算式。運算式必須評估為 $true 或 $false。請以 大括號括住指令碼區塊。範例: $c = "Mercury,Venus,Earth,Mars,Jupiter,Saturn,Uranus,Neptu ne" $c -split {$_ -eq "e" -or $_ -eq "p"} M rcury,V nus,Earth,Mars,Ju it r,Saturn,Uranus,N tun <選項> 請以引號括住選項名稱。只有當在陳述式中使用 <Max-substrings> 參數時, Options 參數才有效。 Options 參數的語法為: "SimpleMatch [,IgnoreCase]" "[RegexMatch] [,IgnoreCase] [,CultureInvariant] [,IgnorePatternWhitespace] [,ExplicitCapture] [,Singleline | ,Multiline]" SimpleMatch 選項為: -- SimpleMatch:評估分隔字元時,請使用簡單字串比較。無法搭配 RegexMatch 使用。 -- IgnoreCase:即使指定 -cSplit 運算子,仍強制不區分大小寫比對。 RegexMatch 選項為: -- RegexMatch:使用規則運算式比對評估分隔字元。這是預設行為。無法搭 配 SimpleMatch 使用。 -- IgnoreCase:即使指定 -cSplit 運算子,仍強制不區分大小寫比對。 -- CultureInvariant:評估分隔字元時,忽略語言中的文化特性差異。僅適 用於 RegexMatch。 -- IgnorePatternWhitespace:忽略以數字符號 (#) 標示的未逸出空白字元 和註解。僅適用於 RegexMatch。 -- Multiline:Multiline 模式會辨識行和字串的開頭和結尾。僅適用於 RegexMatch。預設為 Singleline。 -- Singleline:Singleline 模式僅辨識字串的開頭和結尾。僅適用於 RegexMatch。預設為 Singleline。 -- ExplicitCapture:忽略非具名的比對群組,使結果清單中只會傳回明確 的擷取群組。僅適用於 RegexMatch。 一元和二元分割運算子 一元分割運算子 (-split <字串>) 的優先順序高於逗號。因此,如果您提交逗號分 隔的字串清單給一元分割運算子,則只會分割第一個字串 (位於第一個逗號前)。 若要分割多個字串,請使用二元分割運算子 (<字串> -split <分隔字元>)。請以括 號括住所有字串,或是將字串儲存在變數中,然後將變數提交給分割運算子。 請看以下範例: -split "1 2", "a b" 1 2 a b "1 2", "a b" -split " " 1 2 a b -split ("1 2", "a b") 1 2 a b $a = "1 2", "a b" -split $a 1 2 a b 範例 下列陳述式會在空白字元處分割字串。 C:\PS> -split "Windows PowerShell 2.0`nWindows PowerShell with remoting" Windows PowerShell 2.0 Windows PowerShell with remoting 下列陳述式會在任何逗號處分割字串。 C:\PS> "Mercury,Venus,Earth,Mars,Jupiter,Saturn,Uranus,Neptune" -split ',' Mercury Venus Earth Mars Jupiter Saturn Uranus Neptune 下列陳述式會在 "er" 模式處分割字串。 C:\PS>"Mercury,Venus,Earth,Mars,Jupiter,Saturn,Uranus,Neptune" -split 'er' M cury,Venus,Earth,Mars,Jupit ,Saturn,Uranus,Neptune 下列陳述式會在字母 "N" 處執行區分大小寫的分割。 C:\PS> "Mercury,Venus,Earth,Mars,Jupiter,Saturn,Uranus,Neptune" -cSplit 'N' Mercury,Venus,Earth,Mars,Jupiter,Saturn,Uranus, eptune 下列陳述式會在 "e" 和 "t" 處分割字串。 C:\PS> "Mercury,Venus,Earth,Mars,Jupiter,Saturn,Uranus,Neptune" -split '[et]' M rcury,V nus, ar h,Mars,Jupi r,Sa urn,Uranus,N p un 下列陳述式會在 "e" 和 "r" 處分割字串,但是限制傳回六個結果子字串。 C:\PS> "Mercury,Venus,Earth,Mars,Jupiter,Saturn,Uranus,Neptune" -split '[er]', 6 M cu y,V nus, arth,Mars,Jupiter,Saturn,Uranus,Neptune 下列陳述式會將字串分割成三個子字串。 C:\PS> "a,b,c,d,e,f,g,h" -split ",", 3 a b c,d,e,f,g,h 下列陳述式會將兩個字串分割成三個子字串 (此限制會單獨套用至每一個字串)。 C:\PS> "a,b,c,d", "e,f,g,h" -split ",", 3 a b c,d e f g,h 下列陳述式會在 here-string 字串中的第一個數字處分割每一行。此陳述式使用 Multiline 選項辨識每一行和每一個字串的開頭。 0 代表「子字串數目上限」參數的「全部傳回」值。您只能在指定子字串數目上限值 時使用選項,例如 Multiline。 C:\PS> $a = @' 1The first line. 2The second line. 3The third of three lines. '@ C:\PS> $a -split "^\d", 0, "multiline" The first line. The second line. The third of three lines. 下列陳述式使用 SimpleMatch 選項指示 -split 運算子逐字解譯句號 (.) 分隔字元。 使用預設值 RegexMatch 時,以引號括住的句號 (".") 會解譯為符合新行字元以外 的任何字元。因此,split 陳述式會針對新行以外的每一個字元傳回一個空白行。 0 代表「子字串數目上限」參數的「全部傳回」值。您只能在指定子字串數目上限值 時使用選項,例如 SimpleMatch。 C:\PS> "This.is.a.test" -split ".", 0, "simplematch" This is a test 下列陳述式會根據變數的值,在兩個分隔字元的其中一處分割字串。 C:\PS> $i = 1 C:\PS> $c = "LastName, FirstName; Address, City, State, Zip" C:\PS> $c -split {if ($i -lt 1) {$_ -eq ","} else {$_ -eq ";"}} LastName, FirstName Address, City, State, Zip 下列 split 陳述式會先在角括弧處分割 XML 檔,再於分號處分割。結果為可讀版本 的 XML 檔。 C:\PS> get-process powershell | export-clixml ps.xml C:\PS> $x = import-clixml ps.xml C:\PS> $x = $x -split "<" C:\PS> $x = $x -split ";" 若要顯示結果,請輸入 "$x"。 C:\PS> $x @{__NounName=Process Name=powershell Handles=428 VM=150081536 WS=34840576 PM=36253696 ... 請參閱 Split-Path about_Operators about_Comparison_Operators about_Join