2014-12-11 5 views
9

Ich versuche, ein seltsames Verhalten mit diesem Cmdlet zu verstehen.Out-File -Append in Powershell erzeugt keine neue Zeile und bricht Zeichenfolge in Zeichen

Wenn ich "Out-File -appenn Dateiname.txt" für eine Textdatei verwende, die ich über das Windows-Kontextmenü erstellt und eingegeben habe, wird die Zeichenfolge an die letzte Zeile in dieser Datei als eine Reihe von Leerzeichen angehängt getrennte Zeichen.

So:

"This is a test" | out-file -append textfile.txt 

produzieren: T h i s i s A t e s t

Dies wird nicht passieren, wenn out-Datei, um die Datei erstellt, oder wenn die Textdatei hat keinen Text in ihm vor anhängen. Warum passiert das?

Ich werde auch bemerken, dass die Wiederholung des Befehls nur auf die gleiche Weise an die gleiche Zeile anhängen wird. Ich denke, es erkennt nicht Newline oder Zeilenumbrüche Terminator oder etwas aufgrund der geänderten Codierung?

+1

"Out-File" verwendet standardmäßig die Unicode-Kodierung. Verwenden Sie '-Encoding Ascii'. In Ihrem Fall out-file -Encoding Ascii -append textfile.txt'. Add-Content verwendet standardmäßig ASCII und hängt auch standardmäßig an. "Dies ist ein Test" | Add-Inhalt textfile.txt'. Sie haben keine neue Zeile gesendet, damit sie nicht in die Datei geschrieben wird. – Matt

+0

möglich duplicate von [NUL-Byte zwischen jedem anderen Zeichen in der Ausgabe] (http://stackoverflow.com/questions/11147179/nul-byte-between-every-other-character-in-output) – Matt

+0

@Matt Sie sollten habe deinen ersten Kommentar eine Antwort gegeben und das Problem gelöst. – TheMadTechnician

Antwort

13

Out-File Standard auf Unicode-Codierung, weshalb Sie das Verhalten sehen, Sie sind. Verwenden Sie -Encoding Ascii, um dieses Verhalten zu ändern. In Ihrem Fall

Out-File -Encoding Ascii -append textfile.txt. 

Add-Content verwendet Ascii und fügt auch standardmäßig.

"This is a test" | Add-Content textfile.txt. 

Wie für den Mangel an Newline: Sie haben kein Newline senden, damit es nicht eine Datei schreiben.