【问题标题】:PowerShell: Why does Out-File break long line into smaller lines?PowerShell:为什么 Out-File 将长行分成更小的行?
【发布时间】:2012-03-02 04:35:12
【问题描述】:

试试这个小实验。创建一个文件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

【问题讨论】:

  • 这有帮助吗:stackoverflow.com/questions/2675552/…?我认为在 Keith Hill 的“Effective Powershell”中讨论了这个一般主题 - 输出被格式化为特定宽度的显示器 - 免费下载。无论如何,我不知道为什么,希望该链接有所帮助。

标签: powershell


【解决方案1】:

您可以使用 -width 参数调整 Out-File 换行的位置

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

【讨论】:

    【解决方案2】:
    $ Get-Content Foo.txt | Select-String "a" | Add-Content Foo2.txt
    

    使用Add-Content(或者如果你想覆盖文件,你可以使用Set-Content)。

    【讨论】:

      【解决方案3】:

      这可以解释为Get-Content Foo.txt | Select-String "a" 的结果是MatchInfo 类型,它不是string

      只是测试:

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

      【讨论】:

      • JPBlanc:谢谢,这很有帮助。知道为什么 Out-File 格式化 MatchInfo 就像它被送到控制台一样,但不用于 String 吗?
      • @Ashwin 复杂对象的行为看起来是一致的,例如MatchInfoDirectoryInfo 等...例如试试这个:Get-Item C:\Windows | Out-File C:\Test.txt。我认为 PowerShell 在将文本表示写入文件之前需要先将复杂对象发送到对象格式化引擎。
      • 安迪·阿里斯门迪:这个解释很有道理。谢谢!
      • 这似乎是有道理的,直到我低头看@Tahir Hassan 的回答。
      • @Santhos 2012 年 4 月 2 日我回答了这个问题,哈萨姆在 2015 年 3 月 25 日给出了一个转折点,而不是回答这个问题。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-12-26
      • 1970-01-01
      • 2023-02-02
      • 1970-01-01
      相关资源
      最近更新 更多