在PowerShell中,Out-File
和之间的区别是Set-Content
什么?还是Add-Content
和Out-File -append
?
我发现如果我对同一个文件使用两者,文本完全是mojibaked.
(小问题:>
是别名Out-File
,对吧?)
Col*_*nic 81
在对PowerShell进行了几个月的经验以及一些科学实验之后,这里总结了我所推断的内容.我从来没有在文档中找到任何这些:(
[ 更新:现在大部分内容似乎都有更好的记录.]
在Out-File
运行时,另一个应用程序可以读取日志文件.
在Set-Content
运行时,其他应用程序无法读取日志文件.因此,永远不要使用Set-Content
记录长时间运行的命
Out-File
默认情况下保存在Unicode
(UTF-16LE
)编码中(尽管可以指定),而PowerShell 3+中Set-Content
默认为ASCII
(US-ASCII
)(也可以指定).在早期的PowerShell版本中,Set-Content
以Default
(ANSI)编码编写内容.
编者注:PowerShell从版本5.1开始仍然默认使用特定于文化Default
("ANSI")的编码,尽管文档声称.如果ASCII是默认值,则非ASCII字符(例如ü
将转换为文字) ?
,但情况并非如此:'ü' | Set-Content tmp.txt; (Get-Content tmp.txt) -eq '?'
yield $False
.
PS > $null | out-file outed.txt
PS > $null | set-content set.txt
PS > md5sum *
f3b25701fe362ec84616a93a45ce9998 *outed.txt
d41d8cd98f00b204e9800998ecf8427e *set.txt
Run Code Online (Sandbox Code Playgroud)
这意味着两个命令的默认值不兼容,混合它们将损坏文本,因此始终指定编码.
正如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
Run Code Online (Sandbox Code Playgroud)
我相信这种格式化会导致换行,但我还不能描述它.
Set-Content
会在以下情况下无法可靠地创建空文件Out-File
:
在空文件夹中,该命令dir | out-file out.txt
创建文件,而不创建文件dir | set-content sc.txt
.
Set-Content
从管道中获取文件名; 允许您将一些文件的内容设置为某个固定值.
Out-File
从管道获取数据; 更新单个文件的内容.
Set-Content
包括以下附加参数:
Out-File
包括以下附加参数:
有关这些参数的更多信息,请参阅帮助; 例如get-help out-file -parameter append
.
And*_*ndi 15
Out-File
除非设置了-NoClobber
和/或-Append
标志,否则具有覆盖输出路径的行为.Add-Content
如果默认情况下输出路径已存在,则会附加内容(如果可以).如果文件尚不存在,则两者都将创建该文件.
另一个有趣的区别是,Add-Content
默认情况下会创建一个ASCII编码文件,默认情况下Out-File
会创建一个小的endian unicode编码文件.
>
是一个别名的语法糖Out-File
.它Out-File
有一些预定义的参数设置.
好吧,我不同意...... :)
所以:
ls | Add-Content test.txt
Run Code Online (Sandbox Code Playgroud)
和
ls | Out-File test.txt
Run Code Online (Sandbox Code Playgroud)
会给你完全不同的结果.
不,'>'不是别名,它是重定向运算符(与其他shell相同).并且有非常严重的限制......它会以相同的方式切割线条.Out-File有-Width参数可以帮助您避免这种情况.此外,使用重定向运算符,您无法确定要使用的编码.
HTH Bartek
归档时间: |
|
查看次数: |
82899 次 |
最近记录: |