Out-File 和回车 returns

Out-File and carriage returns

如果我有一个程序,例如这个 Go 程序:

package main
import "fmt"

func main() {
   fmt.Print("North East\n")
   fmt.Print("South West\n")
}

这个程序根本不产生回车 returns,只产生换行符。但是,如果我这样做:

prog.exe > prog.txt

PowerShell 自行为每一行添加回车 returns。我只希望 PowerShell 忠实地输出我的程序创建的内容,仅此而已。所以我尝试了这个:

prog.exe | Out-File -NoNewline prog.txt

并且 PowerShell 没有添加回车 returns,但它继续并删除了换行符。我如何做我想做的事?更新:根据一个答案,这似乎可以做到:

start -rso prog.txt prog.exe

这对我有用。请注意,out-file 默认为 utf16 编码,与 set-content.

"hi`nthere`n" | out-file file -NoNewline

format-hex file


           Path: C:\users\admin\foo\file

           00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F

00000000   FF FE 68 00 69 00 0A 00 74 00 68 00 65 00 72 00  .þh.i...t.h.e.r.
00000010   65 00 0A 00                                      e...

好的,我的第一个 Go 程序:

(go run .) -join "`n" | set-content file -NoNewline

问题是 windows 程序输出回车 return 和换行。这可以正常工作,或者 return 不会在 linux 或 osx powershell 中工作。

package main
import "fmt"

func main() {
   fmt.Print("North East\r\n")
   fmt.Print("South West\r\n")
}
go run . > file

实际上这个问题在 powershell 7 中得到了解决。即使 go 代码没有,文件最终也会有 \r\n。

这似乎是由于重定向输出的行为。只要检测到换行符,它就会分成单独的行,但是当 Powershell 再次加入这些行时,它将同时使用换行符 回车符 return (Windows 默认值).

不过,如果您 直接 重定向输出,这应该不是问题。所以这应该会给你预期的行为:

Start-Process prog.exe -RedirectStandardOutput prog.txt