Powershell Here-String разрывы строк не работают с выходным файлом - PullRequest
0 голосов
/ 10 января 2019

У меня есть несколько сотен строк текста, определенных в переменной как строка здесь:

$outputText = @"
Line1
Line2
Line3
And so on...
"@

Если я напечатаю $outputText на экране, он будет отображаться правильно:

PS > $outputText
Line1
Line2
Line3
And so on...
PS > 

Однако, когда я пытаюсь вывести его в файл любым доступным мне способом, я всегда теряю разрывы строк, и файл выглядит так:

Line1Line2Line3And so on...

Я пытался сделать следующее:

$outputText | Set-Content file.txt
Add-Content file.txt -Value $outputText
Out-File -InputObject $outputText file.txt

Если я добавлю 'r'n (с соответствующими галочками) в конце каждой строки, видимый вывод имеет дополнительный разрыв строки между каждой строкой, но выходной файл показывает каждую строку правильно. Однако поставить возврат каретки и новую строку после каждой из нескольких сотен строк на самом деле не вариант.

Как мне было бы проще правильно выводить разрывы строк в файле или определять многострочные строки другим способом, чтобы разрывы строк работали без сложных управляющих символов или тому подобного?

1 Ответ

0 голосов
/ 10 января 2019

Здесь строка помещает текст в ONE строку, строки, разделенные LF / 0xA.

$outputText = @"
Line1
Line2
Line3
And so on...
"@
$outputText | Format-Hex

           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.....

В отличие от разделения строки:

$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}

           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                                         ...

Другие вещи, возможно влияющие на вывод (не здесь),


> $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

PS : запуск второго скрипта в VSCode вернул последовательность 0D / 0D / 0A, пришлось использовать -split '\r\n'

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...