如何解决如何为powershell tee命令指定文件格式?
我使用cmd.exe在Windows 10笔记本电脑上运行powershell ".\t.bat 2>&1 | tee results.txt"
,根据记事本++,生成的文件results.txt
以“ UCS-2 LE BOM”格式输出。我的VBScript和其他人阅读困难。
是的,我可以使用“编码->用ASCII编码”之类的方法,但这是手动干预,我想使过程自动化。
是否有一些PowerShell选项可以让我说出tee输出文件应该是什么格式? 还是某些PowerShell / DOS命令会为我“修复” /更改文件格式?
谢谢。
解决方法
改为使用文件外文件。
,注释
您还可以使用Out-File cmdlet或重定向运算符,两者 其中的输出保存在文件中,但不向下发送 管道。
从PowerShell 6开始,Tee-Object使用无BOM的UTF-8编码 当它写入文件时。如果您需要其他编码,请使用 带有Encoding参数的文件外cmdlet。
不幸的是,截至Tee-Object
cmdlet(Windows上的内置别名为tee
[1] )自-Encoding
起没有参数PowerShell 7.1-与其他写入文件的cmdlet不同。
GitHub suggestion #11104建议添加一个。
Tee-Object
在 Windows PowerShell 中的默认编码为“ Unicode”(UTF-16LE)(严格来说,它与UCS相同,不 -2 LE [2] ),而在 PowerShell [Core] v6 + 中,所有cmdlet使用相同的编码,因此它是无BOM的UTF-8。
该文件尚未正式记录,但是您可以通过为Tee-Object
分配编码来间接控制控制$PSDefaultParameterValues['Out-File:Encoding']
的输出编码,但是请注意,这样做也会更改Out-File
和>
/ >>
的默认字符编码。
以下命令使Tee-Object
使用带有BOM的UTF-8编码:
powershell -c "$PSDefaultParameterValues['Out-File:Encoding'] = 'utf8'; .\t.bat 2>&1 | tee results.txt"
在两个PowerShell版本中,可以传递给Out-File -Encoding
的任何值都可以分配给$PSDefaultParameterValues['Out-File:Encoding']
,在 Windows PowerShell 中,该值仅限于预定义的枚举值,而在 PowerShell [Core] v6 + (其可执行文件是pwsh
而不是powershell.exe
),您还可以传递任何从类型System.Text.Encoding
派生的实例。
[1]在类似Unix的平台上未定义 这个别名,以免在本地隐藏tee
实用程序。
[2] UCS-2是过时的固定宽度编码,其中每个字符正好占据2个字节。 UTF-16是该编码的_variable_width 超级集,它还能够通过称为代理对。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。