我有一个奇怪的问题,将输出重定向到文件。我已经尝试了几种不同的方法,并继续遇到格式化问题。
我将以下代码作为完美运行的示例:
Get-childitem -Path 'C:\Program Files' | Where-Object{$_.Name -like "*microsoft*"} |
sort Name -Descending | format-table Name, LastWriteTime >> c:\temp\newfile.txt
这是文本文件中的输出:
Name LastWriteTime
---- -------------
Microsoft.NET 05/07/2015 7:56:29 AM
Microsoft Synchronization Services 05/07/2015 7:56:39 AM
Microsoft Sync Framework 05/07/2015 7:56:29 AM
Microsoft SQL Server Compact Edition 05/07/2015 7:56:29 AM
Microsoft Silverlight 05/26/2015 10:18:53 AM
Microsoft Policy Platform 05/07/2015 7:38:56 AM
Microsoft Office 05/07/2015 5:48:43 PM
Microsoft Application Virtualization Client 01/27/2015 6:45:27 PM
Microsoft Analysis Services 05/07/2015 7:54:46 AM
它完全按照我的预期工作,并希望它。但是,当我尝试做同样的事情并附加到现有文件时,我会得到奇怪的格式。使用此代码:
Get-childitem -Path 'C:\Program Files' | Where-Object{$_.Name -like "*microsoft*"} |
sort Name -Descending | format-table Name, LastWriteTime >> c:\temp\existingfile.txt
附加到现有文本文件时生成格式奇怪的结果。格式化不会在这里遇到,但这是我可以在这里显示的最接近的近似值。实际的文本文件比这里显示的更加混乱。
This is a test of appending to an existing file
-------
This is some previously logged information
------
It doesn't really matter what text is already here
------
N a m e
M i c r o s o f t S y n c h r o n i z a t i o n S e r v i c e s
M i c r o s o f t S i l v e r l i g h t
M i c r o s o f t A p p l i c a t i o n V i r t u a l i z a t i o n C l i e n t
那么为什么会发生这种情况,以及如何在追加到现有文件时获得与新文本文件相同的结果?
答案 0 :(得分:6)
您正在处理不同的文件编码。将powershell的输出重定向到文件时,该文件将接收Unicode文本。
而不是重定向,管道转出文件,你可以控制编码。
Out-File [-filePath] string [[-encoding] string]
[-append] [-width int] [-inputObject psobject]
[-force] [-noClobber] [-whatIf]
[-confirm] [CommonParameters]
-encoding string
The character encoding used in the file.
"Unicode", "UTF7", "UTF8", "UTF32", "ASCII", "BigEndianUnicode",
"Default", or "OEM". The default is Unicode.
Default=system ANSI code page.
OEM=OEM code page identifier for the OS.
我不知道您要附加的文件的编码是什么,但假设它是简单的ascii,您的cmd变为:
Get-childitem -Path 'C:\Program Files' | Where-Object{$_.Name -like "*microsoft*"} |
sort Name -Descending | format-table Name, LastWriteTime |
out-file -append -encoding ASCII -filepath c:\temp\existingfile.txt
注意:$ OutputEncoding的自动变量控制powershell中重定向的默认编码。