web-dev-qa-db-ja.com

powershell -split( '')は新しい行を指定します

Get-Content $user| Foreach-Object{
   $user = $_.Split('=')
   New-Variable -Name $user[0] -Value $user[1]}

スクリプトで作業して、テキストファイルを配列に分割し、新しい行ごとにファイルを分割しようとしている

「=」記号を何に変更すればよいですか

18
colbyt

テキストファイルの正確なエンコーディングに依存しますが、[Environment]::NewLine通常、トリックを行います。

"This is `r`na string.".Split([Environment]::NewLine)

出力:

これは

文字列。

30
Ryan Ries

String.Splitメソッドの問題は、指定された文字列のeach文字で分割されることです。したがって、テキストファイルにCRLF行区切り文字がある場合、空の要素が取得されます。

-Split演算子 を使用したより良いソリューション。

"This is `r`na string." -Split "`r`n" #[Environment]::NewLine, if you prefer
7
LCC

Split(String []、StringSplitOptions) メソッドオーバーロードを使用して、String.Splitメソッドを使用してCRLFで分割し、空の要素で終わることはありません。 。

この方法を使用して実行するには、いくつかの方法があります。

オプション1

$input.Split([string[]]"`r`n", [StringSplitOptions]::None)

これは、`r`nで表されるCRLF(キャリッジリターンとラインフィード)の結合文字列で分割されます。 [StringSplitOptions]::Noneオプションを使用すると、Splitメソッドは配列内の空の要素を返すことができますが、すべての行がCRLFで終わっている場合は存在しないはずです。

オプション2

$input.Split([Environment]::NewLine, [StringSplitOptions]::RemoveEmptyEntries)

これは、eitherキャリッジリターンまたはラインフィードに分割されます。そのため、配列は実際の文字列が散在した空の要素になります。 [StringSplitOptions]::RemoveEmptyEntriesオプションは、空の要素を含めないようにSplitメソッドに指示します。

4
aphoria