PowerShell: Почему Out-File разбивает длинную строку на более мелкие строки?

Попробуйте этот небольшой эксперимент. Создайте файл Foo.txt с очень длинной строкой текста (например, длиной 500 символов):

// Foo.txt
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa...

Выполните следующую команду:

$ Get-Content Foo.txt | Select-String "a" | Out-File Foo2.txt

Вы увидите, что длинная строка строки была разбита на более мелкие строки в Foo2.txt. Длина каждой меньшей строки такая же, как и ширина консоли.

Почему Out-File разбивает длинную строку на меньшую строку, когда вывод не направляется на консоль?

И почему Out-File не разбивает строки для следующей команды?

$ Get-Content Foo.txt | Out-File Foo3.txt

Ответ 1

Это можно объяснить тем, что результат Get-Content Foo.txt | Select-String "a" Get-Content Foo.txt | Select-String "a" имеет тип MatchInfo, это не string.

просто тест:

Get-Content Foo.txt | Select-String "a" | Format-list *

Ответ 2

$ Get-Content Foo.txt | Select-String "a" | Add-Content Foo2.txt

Используйте Add-Content (или вы можете использовать Set-Content если вы хотите перезаписать файл).

Ответ 3

Вы можете настроить, где Out-File разбивает строки, используя параметр -width

$ Get-Content Foo.txt | Select-String "a" | Out-File -width 1000 Foo2.txt