带有-Append的PowerShell Tee-Object命令

k10s72fa  于 2023-04-30  发布在  Shell
关注(0)|答案(2)|浏览(119)

我在PowerShell 4上遇到了一个问题。0 Tee-Object命令(别名tee),我使用的命令如下:

powershell "cmd /c dir | Tee-Object -filepath C:\1.txt -Append"

当1.txt是一个空文件时,它会按照您在屏幕上看到的那样写入输出(按原样)。但是,如果1.txt在您运行命令之前有一些现有的内容,它会在输出中添加新行,并且文件看起来完全混乱。
我很惊讶地看到这种行为,任何想法都将帮助我继续前进。请注意,我必须使用Tee-Object命令,因为我希望在运行命令时在屏幕上看到输出,并将其附加到包含某些内容的现有日志文件中。

cvxl0en2

cvxl0en21#

注意Tee-Object用UTF 16 LE编码写,这就是为什么!

xqkwcwgp

xqkwcwgp2#

像out-file -append或“〉〉"一样,tee-object -append可以在同一文件中破坏性地混合不同的编码,并且默认为utf 16,即使文件已经包含ascii字符。

echo hi1 | set-content file
echo hi2 | tee-object -FilePath file -append

(get-content file) -replace '\0','\0'  # show extra nulls from utf16

hi1
h\0i\02\0
\0
\0

T形连接到变量,并使用add-content附加到文件中。Add-content将检查BOM并匹配编码。

echo hi1 | set-content file
echo hi2 | tee-object -variable out
$out | add-content file

(get-content file) -replace '\0','\0'

hi1
hi2

相关问题