powershell -split('')指定一个新行

col*_*byt 18 powershell scripting

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

我正在尝试处理脚本并将文本文件拆分为数组,根据每个新行拆分文件

我应该将"="符号更改为

Rya*_*ies 33

它取决于文本文件的确切编码,但[Environment]::NewLine通常可以解决问题.

"This is `r`na string.".Split([Environment]::NewLine)
Run Code Online (Sandbox Code Playgroud)

输出:

这是

一个字符串.

  • 这将在原始字符串中的每一行之间包含空元素. (6认同)
  • @PL,请注意,删除_所有_空元素可能是不需要的。更好的解决方案是避免一开始就出现虚假的空元素,即使用 ``-split "`r`n"`` - 或者更好,以便也匹配 Unix 格式的 LF-only 换行符,`-split ' \r?\n'`。如果您也想消除(真)空元素,请附加 `-ne ''` (3认同)

aph*_*ria 13

通过使用Split(String[], StringSplitOptions)方法重载,您可以使用该String.Split方法进行拆分,CRLF而不会以空元素结束。

有几种不同的方法可以使用这种方法来做到这一点。

选项1

$input.Split([string[]]"`r`n", [StringSplitOptions]::None)
Run Code Online (Sandbox Code Playgroud)

这将拆分由 表示的组合CRLF(回车和换行)字符串`r`n。该[StringSplitOptions]::None选项将允许该Split方法返回数组中的空元素,但如果所有行都以CRLF.

选项 2

$input.Split([Environment]::NewLine, [StringSplitOptions]::RemoveEmptyEntries)
Run Code Online (Sandbox Code Playgroud)

这将分裂的任何一个回车或换行。所以数组最终会以散布着实际字符串的空元素结束。该[StringSplitOptions]::RemoveEmptyEntries选项指示该Split方法不包含空元素。


LCC*_*LCC 9

该String.Split方法的问题在于它会分割给定字符串中的每个字符。因此,如果文本文件具有CRLF行分隔符,则将获得空元素。

使用-Split运算符更好的解决方案。

"This is `r`na string." -Split "`r`n" #[Environment]::NewLine, if you prefer
Run Code Online (Sandbox Code Playgroud)


mar*_*tin 6

目前给出的答案仅考虑Windows作为运行环境。如果您的脚本需要在各种环境(Linux、Mac 和 Windows)中运行,请考虑使用以下代码片段:

$lines = $string.Split(
    @("`r`n", "`r", "`n"), 
   [StringSplitOptions]::None)
Run Code Online (Sandbox Code Playgroud)