在 PowerShell 中,Out-File
之间有什么区别?和 Set-Content
?或Add-Content
和Out-File -append
?
我发现如果我对同一个文件使用两者,文本完全是 mojibaked .
(第二个问题:>
是 Out-File
的别名,对吧?)
最佳答案
以下是我在使用 PowerShell 几个月的经验和一些科学实验后得出的结论的摘要。我从未在文档中找到任何这些:(
[更新:现在看来其中大部分内容都有更好的记录。]
读写锁定
当Out-File
运行时,另一个应用程序可以读取日志文件。
当Set-Content
运行时,其他应用程序无法读取日志文件。因此,永远不要使用Set-Content
来记录长时间运行的命令。
编码
Out-File
保存在 Unicode
(UTF-16LE
) 默认编码(尽管可以指定),而 Set-Content
默认为ASCII
(US-ASCII
) 在 PowerShell 3+ 中(也可以指定)。在早期的 PowerShell 版本中,Set-Content
将内容写入 Default
(ANSI) 编码。
编者注:从版本 5.1 开始,PowerShell 仍然默认使用特定于区域性的默认
(“ANSI”)编码,尽管文件声称如此。如果 ASCII 为默认值,则非 ASCII 字符(例如 ü
)将被转换为文字 ?
,但事实并非如此 em> 案例:'ü' |设置内容tmp.txt; (Get-Content tmp.txt) -eq '?'
产生 $False
。
PS > $null | out-file outed.txt
PS > $null | set-content set.txt
PS > md5sum *
f3b25701fe362ec84616a93a45ce9998 *outed.txt
d41d8cd98f00b204e9800998ecf8427e *set.txt
这意味着两个命令的默认值不兼容,混合它们会损坏文本,因此请始终指定编码。
格式化
正如 Bartek 所解释的,Out-File
保存输出的精美格式,如终端中所示。因此,在包含两个文件的文件夹中,命令 dir | out-file out.txt
创建一个包含 11 行的文件。
而Set-Content
保存了更简单的表示。在包含两个文件的文件夹中,命令 dir | set-content sc.txt
创建一个包含两行的文件。要模拟终端中的输出:
PS > dir | ForEach-Object {$_.ToString()}
out.txt
sc.txt
我相信这种格式会导致换行,但我还无法描述它。
文件创建
Set-Content
在 Out-File
执行以下操作时无法可靠地创建空文件:
在空文件夹中,命令dir | out-file out.txt
创建一个文件,而 dir | set-content sc.txt
没有。
管道变量
Set-Content
从管道中获取文件名;允许您将多个文件的内容设置为某个固定值。
Out-File
从管道中获取数据;更新单个文件的内容。
参数
Set-Content
包括以下附加参数:
- 排除
- 过滤
- 包括
- 通过
- 直播
- 使用交易
Out-File
包含以下附加参数:
- 追加
- 无破坏
- 宽度
有关这些参数的更多信息,请参阅帮助;例如获取帮助输出文件-参数附加
。
关于PowerShell Set-Content 和 Out-File - 有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10655788/