【问题标题】:Out-File -append in Powershell does not produce a new line and breaks string into charactersPowershell 中的 Out-File -append 不会产生新行并将字符串分解为字符
【发布时间】:2021-03-04 12:13:34
【问题描述】:

我试图了解此 cmdlet 的一些奇怪行为。

如果我在通过 Windows 上下文菜单创建并输入文本的文本文件上使用“Out-File -append Filename.txt”,则字符串将以一系列空格分隔的形式附加到该文件的最后一行字符。

所以:

"This is a test" | out-file -append textfile.txt

将产生: 这就是我的想法

如果 out-file 创建文件,或者文本文件在追加之前没有文本,则不会发生这种情况。为什么会这样?

我还要注意,重复该命令只会以相同的方式附加到同一行。我猜它由于编码更改而无法识别换行符或换行符终止符或其他东西?

【问题讨论】:

  • Out-File 默认为 unicode 编码。使用-Encoding Ascii。在你的情况下out-file -Encoding Ascii -append textfile.txt。 Add-Content 默认使用 ascii,也默认附加。 "This is a test" | Add-Content textfile.txt。您没有发送换行符,因此它不会将一个换行符写入文件。
  • @Matt 您应该刚刚将您的第一条评论作为答案并认为问题已解决。
  • @TheMadTechnician 不确定是否值得回答重复的问题
  • @Matt 如果措辞足够不同,我认为它可以帮助更多人找到答案,因为每个人的搜索方式都不同。

标签: powershell powershell-2.0


【解决方案1】:

Out-File 默认为 unicode 编码,这就是您看到自己行为的原因。使用 -Encoding Ascii 更改此行为。你的情况

Out-File -Encoding Ascii -append textfile.txt. 

Add-Content 使用 Ascii 并且默认情况下也附加。

"This is a test" | Add-Content textfile.txt.

至于缺少换行符:您没有发送换行符,因此它不会将一个换行符写入文件。

【讨论】:

  • 我该如何做相反的事情。如果我希望它添加到 unicode 中,是否添加内容?
  • @GideonSassoon Add-Content 也支持-Encoding 参数。
  • 实际上,Out-File 确实写了一个新行。有一个明确的选项可以关闭它:-NoNewline.
【解决方案2】:

Add-Content 是默认 ASCII 并添加新行,但是 Add-Content 也会带来文件锁定问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-01-22
    • 2010-12-17
    • 2018-01-05
    • 2022-06-10
    • 2016-03-13
    • 1970-01-01
    • 1970-01-01
    • 2011-11-19
    相关资源
    最近更新 更多