我在变量中定义了几百行文本作为此处字符串:
$outputText = @"
Line1
Line2
Line3
And so on...
"@
Run Code Online (Sandbox Code Playgroud)
如果我$outputText在屏幕上打印,则显示正确:
PS > $outputText
Line1
Line2
Line3
And so on...
PS >
Run Code Online (Sandbox Code Playgroud)
但是,当我尝试将其输出到文件中时,总是丢失换行符,并且文件看起来像这样:
Line1Line2Line3And so on...
Run Code Online (Sandbox Code Playgroud)
我尝试遵循:
$outputText | Set-Content file.txt
Add-Content file.txt -Value $outputText
Out-File -InputObject $outputText file.txt
Run Code Online (Sandbox Code Playgroud)
如果我'r'n在每行的末尾添加(带有适当的刻度),则可见输出在每行之间会有额外的换行符,但是输出文件正确显示了每行。但是,在几百行中的每行之后放置回车和换行符并不是一个真正的选择。
我如何能够更轻松地在文件中正确地输出换行符,或者以其他方式定义多行字符串,从而使换行符在没有复杂的转义符等的情况下也能正常工作?
小智 5
这里的字符串将文本放在一个字符串中,用LF / 0xA分隔行。
$outputText = @"
Line1
Line2
Line3
And so on...
"@
$outputText | Format-Hex
Run Code Online (Sandbox Code Playgroud)
00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F
00000000 4C 69 6E 65 31 0A 4C 69 6E 65 32 0A 4C 69 6E 65 Line1.Line2.Line
00000010 33 0A 41 6E 64 20 73 6F 20 6F 6E 2E 2E 2E 0D 0A 3.And so on.....
Run Code Online (Sandbox Code Playgroud)
相反,分割字符串:
$outputText = @"
Line1
Line2
Line3
And so on...
"@ -split '\n' # or -split "`n"
$outputText | Set-Content file1.txt
Out-File -InputObject $outputText file2.txt
1..2|%{(Get-Content ".\file$_.txt" -raw) | Format-Hex}
Run Code Online (Sandbox Code Playgroud)
00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F
00000000 4C 69 6E 65 31 0D 0A 4C 69 6E 65 32 0D 0A 4C 69 Line1..Line2..Li
00000010 6E 65 33 0D 0A 41 6E 64 20 73 6F 20 6F 6E 2E 2E ne3..And so on..
00000020 2E 0D 0A ...
00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F
00000000 4C 69 6E 65 31 0D 0A 4C 69 6E 65 32 0D 0A 4C 69 Line1..Line2..Li
00000010 6E 65 33 0D 0A 41 6E 64 20 73 6F 20 6F 6E 2E 2E ne3..And so on..
00000020 2E 0D 0A ...
Run Code Online (Sandbox Code Playgroud)
其他可能影响输出的因素(不在此处),
$OFS $OutputEncoding[System.Environment]::NewLine> $OutputEncoding
IsSingleByte : True
BodyName : us-ascii
EncodingName : US-ASCII
HeaderName : us-ascii
WebName : us-ascii
WindowsCodePage : 1252
IsBrowserDisplay : False
IsBrowserSave : False
IsMailNewsDisplay : True
IsMailNewsSave : True
EncoderFallback : System.Text.EncoderReplacementFallback
DecoderFallback : System.Text.DecoderReplacementFallback
IsReadOnly : True
CodePage : 20127
Run Code Online (Sandbox Code Playgroud)
PS:在VSCode中运行第二个脚本返回了0D / 0D / 0A序列,不得不使用-split '\r\n'
| 归档时间: |
|
| 查看次数: |
602 次 |
| 最近记录: |