为什么我从powershell输出到文本文件时会胡言乱语?

为什么我从powershell输出到文本文件时会胡言乱语?,powershell,output,Powershell,Output,我正在尝试将目录中的所有文件名输出到一个文件。看起来很简单,但将来我将根据文件名创建有用的信息,并输出到另一个系统的文件中 当我将信息输出到一个文件时,当我在记事本中打开时,它会显示为胡言乱语。输出到屏幕看起来很好 这是我的密码: $files = Get-ChildItem "s:\centmobile\rates\currentrates\forupload\" $outfile = "s:\centmobile\rates\currentrates\test.txt" "New File

我正在尝试将目录中的所有文件名输出到一个文件。看起来很简单,但将来我将根据文件名创建有用的信息,并输出到另一个系统的文件中

当我将信息输出到一个文件时,当我在记事本中打开时,它会显示为胡言乱语。输出到屏幕看起来很好

这是我的密码:

$files = Get-ChildItem "s:\centmobile\rates\currentrates\forupload\"
$outfile = "s:\centmobile\rates\currentrates\test.txt" 
"New File"|Out-File $outfile -Encoding ascii

foreach ($f in $files){
Get-Content $f.FullName  | Add-Content $outfile -Encoding Ascii
Write-Output $f.FullName
}
屏幕输出看起来不错:

PS C:\Windows\System32\WindowsPowerShell\v1.0> S:\CentMobile\Software\Dev\cre8hdrinfo.ps1
S:\centmobile\rates\currentrates\forupload\2019406BICS_BC_Rates_ForUpload.xlsx
S:\centmobile\rates\currentrates\forupload\2019406BICS_FC_Rates_ForUpload.xlsx
文件输出看起来不太好

New File
PK     ! –~íGq  %   [Content_Types].xml ¢(                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  ¬”ËNÃ0E÷HüCä-Jܲ@5í‚Ç
A%ʘxÒXqlËã–öU(4BÍ&–ã™{O&3žÌ6NÖàQY“³q6b  ˜ÂJe–9û\¼¤÷,Á ŒÚÈÙͦ×W“ÅÖ&”m0gUîs,*hfÖ¡“ÒúFÚú%w¢¨ÅøíhtÇk˜†VƒM'OPŠ•Éó†^ïH<hdÉã.°õÊ™pN«B"åk#¹¤{‡Œ2cVÊá
a0ÞéОüm°Ï{§Òx%!™ÞDC|£ù·õõ—µuv^¤ƒÒ–¥*@ÚbÕP2t„Ä
 4:‹kÖeÜgüc0ò¸Œi¿/
÷p ý0o„~U¦F~ºšèT»*PÏË)¢L!†­º¢hŸs%<Èài\8Õ>ÇAÍ<÷Ö!µ‡ÿWá0·mvêH|PpœÜ®   8:Ò•pqÙÛÎ2d‡7—Üô  ÿÿ PK     ! µU0#ô   L   _rels/.rels ¢(                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  ¬’MOÃ0†ïHü‡È÷ÕÝBKwAH»!T~€Iܵ£$Ý¿'TƒG½~üÊÛÝ<êÈ!öâ4¬‹;#¶w­†—úqu*&r–Fq¬áÄvÕõÕö™GJy(v½*«¸¨¡KÉß#FÓñD±Ï.W   ¥†=™ZÆMYÞbø®ÕBSí­†°·7 ê“Ï›×–¦é
?ˆ9LìÒ™ÈsbgÙ®|Èl!õùUSh9i°bžr:"y_dlÀóD›¿ý|-NœÈR"4ø2ÏGÇ% õZ´4ñËyÄ7    ëÈðÉ‚‹¨Þ  ÿÿ PK     ! …ë —  †     xl/workbook.xml¬Umo›:þ~¥ýÆýLÁ¼ƒ’LI ÝJÛT¥]÷¥Òä€S¬æÓ¤ªößwlBš.ÕÔu‹ˆß?çœç&vu¥ÝÞQÖLutféirVÐævª¹ÊŒP×:›W¬!Sýtú‡Ù»&[ÆïÖŒÝi ÐtS½¢M³ËKRã¤•
ã50ä·f×r‚‹®$DÔ•i[–oÖ˜6ú€ó×`°Í†æ$ay_“F œTX ý®¤m7¢ÕùkàjÌïúÖÈYÝÄšVT<(P]«óøü¶a¯+0{‡<mÇáñá,hìñ&X:¹ª¦9gÛˆ3€6Ò'ö#ËDè™v§>x’krrOe¬¸ÿFVþËCÖ£!–ÒJÎ{#šwàfë³É†Väz®†Ûö3®e¤*]«p'Ò‚
RLõ †lKžMð¾]ô´‚U¹¶§›³ƒœ/¸V
...
新文件
PK!——~íGq%[内容类型].xml(                                                                                                                                                                                                                                                                                                                                                           ËNޞe÷HüCä-Jܲ@5íú

A%xÒXqlËã–U(4BÍ&ã™{O&3ž6NÖQY}q6bÖJe–9ā÷FÖhtÖk†VƒM'OPÖHÖ&“m0gUîs,*hfÖÖFÚ%WÖÖhtÖk†VƒM'OPÖH屏幕输出和文件看起来非常不同的原因是,您向屏幕和文件输出的内容完全不同

与:

正如命令所暗示的,您正在获取每个文件的内容并输出到$outfile

在以下情况下:

>Write-Output $f.FullName
您只是将文件名列表输出到屏幕

正如您的问题所述,您需要的是文件名,只需更改:

Get-Content $f.FullName  | Add-Content $outfile -Encoding Ascii
致:

并且它应该向屏幕输出与文件相同的内容

检查/排除故障的一个好方法是在以下情况下删除所有内容:

Get-Content $f.FullName
然后看一下输出,它看起来与文件非常相似,并给您一个错误提示。

返回字符串或字节(在您的情况下是字符串)。您得到的乱码来自将
xlsx
文件中的二进制值解释为
Ascii
字符串(无法解决的案例)

资源(必读,不完整):

发件人:

xlsx文件实际上是伪装的压缩文件…
xlsx文件字符编码/字符集是二进制的

本地文件头签名(4字节)
0x04034b50

维基百科:

大多数签名以短整数结尾,即 以小尾端顺序存储。以ASCII字符串形式查看 “PK”,发明家Phil Katz的首字母缩写。因此,当压缩文件 在文本编辑器中查看文件的前两个字节通常是 “PK”


如果这是一个愚蠢的问题,请原谅,但是您确定文件夹
s:\centmobile\rates\currentrates\forupload
中的所有文件都是ASCII编码的吗?第一个文件显然是一个.zip文件
大多数签名以短整数0x4b50结尾,该整数以小端顺序存储。作为ASCII字符串来看,它的内容是“PK”,发明家Phil Katz的首字母缩写。因此,在文本编辑器中查看ZIP文件时,文件的前两个字节通常为“PK”
@queue通常,运行PowerShell的系统上的文件名不完全受ASCII字符集支持。请使用Unicode编码,如UTF-8,并将该元数据传递给文件的读取器。
$f.FullName  | Add-Content $outfile -Encoding Ascii
Get-Content $f.FullName