Почему я получаю бред при выводе в текстовый файл из powershell? - PullRequest
1 голос
/ 07 апреля 2019

Я пытаюсь вывести все имена файлов в каталоге в файл.Кажется простым, но в будущем я буду создавать полезную информацию, основанную на именах файлов и выводить в файл для другой системы.

Когда я выводю информацию в файл, она отображается как бессмысленная при открытии в блокноте,Вывод на экран выглядит нормально.

Вот мой код:

$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
...

Ответы [ 2 ]

1 голос
/ 07 апреля 2019

Причина, по которой ваш вывод на экран и файл выглядят очень по-разному, заключается в том, что вы не выводите одно и то же содержимое на экран и файл.

С:

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

вы,как и подразумевает команда, получая содержимое каждого файла и выводя в $ outfile.

Пока с:

>Write-Output $f.FullName

Вы просто выводите список имен файловна экран.

Поскольку ваш вопрос говорит, что вы ищете имена файлов, просто измените:

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

на:

$f.FullName  | Add-Content $outfile -Encoding Ascii

, и он должен вывести то же самоечто нужно показать на экране как файл.

Хороший способ проверить / устранить неполадки здесь - просто удалить все после:

Get-Content $f.FullName

и посмотреть на вывод, который будет выглядетьочень похоже на файл и дает вам подсказку, что там что-то не так.

0 голосов
/ 07 апреля 2019

Get-Content командлет возвращает строки или байты ( строки в вашем случае). Глупость, которую вы получаете, происходит от интерпретации двоичных значений из xlsx файлов в виде Ascii строк ( неразрешимых моджибаке кейс).

Ресурсы (обязательное чтение, неполное):

С fileformatcommons.com :

xlsx файлы на самом деле zip замаскированные файлы ...
Кодировка символов xlsx / кодировка: двоичная

Из .ZIP Спецификация формата файла

подпись локального заголовка файла (4 байта) 0x04034b50

Из Zip (формат файла) в Википедии:

Большинство подписей заканчиваются коротким целым числом 0x4b50, которое хранится в порядке байтов. Рассматривается как строка ASCII, это читает «ПК», инициалы изобретателя Фила Каца. Таким образом, когда ZIP-файл при просмотре в текстовом редакторе первые два байта файла обычно "PK".

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...