Um Ergänzungbriantist's helpful answer re -NoNewline
:
Das gilt nicht nur für Out-File
, sondern analog zu Set-Content
/Add-Content
als auch, Wie bereits erwähnt, erfordert -NoNewline
PSv5 +.
anzumerken, dass -NoNewline
bedeutet, dass mit mehrere Objekte zur Ausgabe, es nicht nur ein nachlauf Neue-Zeile (Zeilenumbruch) ist, die unterdrückt wird, aber irgendwelche newlines.
Mit anderen Worten: Die Stringdarstellungen der Eingabeobjekte sind direkt verkettet, ohne ein Trennzeichen (Terminator).
Daher ergeben sich die folgenden Befehle in dem gleichen Dateiinhalte (TestTest
ohne nachlauf Neue-Zeile):
# Single input string
"TestTest" | Out-File -encoding ascii test.txt -NoNewline
# Equivalent command: 2-element array of strings that are directly concatenated.
"Test", "Test" | Out-File -encoding ascii test.txt -NoNewline
Um Ort newlines nur zwischen, nicht aber auch nach die Ausgangs Objekte, müssen Sie die Objekte mit Zeilenumbrüchen kommen explizit:
"Test", "Test" -join "`r`n" | Out-File -encoding ascii test.txt -NoNewline
Verwenden Sie "`n"
anstelle von "`r`n"
, um Nur-LF-Zeilenumbrüche im Unix-Stil zu erstellen.
Caveat:
Die obige -join
Lösung implizit konvertiert die Eingabe in Strings Objekte, wenn sie es nicht schon sind und tut dies, indem für jedes Objekt die .NET .ToString()
Methode aufrufen, die oft eine andere ergibt Darstellung als die, die Out-File
würde direkt erstellen, weil Out-File
PowerShell Standardausgabe Formatierer; vergleichen Sie zum Beispiel die Ausgaben von (Get-Date).ToString()
und nur Get-Date
.
Wenn Sie Ihre Eingabe umfasst nur Strings und/oder nicht-Strings, deren .ToString()
Darstellung zufriedenstellend, die oben genannte Lösung funktioniert, aber beachten Sie, dass es dann im Allgemeinen bevorzugt ist, den Set-Content
Cmdlets, zu verwenden, die die gleiche stringification gilt implizit.
Für eine vollständige Diskussion der Unterschiede zwischen Out-File
und Set-Content
, siehe this answer von mir.
Wenn Ihre Eingabe Nicht-Strings enthält, die formatiert werden sollen, wie sie auf der Konsole ausgegeben werden, gibt es eigentlich keine einfache Lösung: Sie können Out-String
verwenden, um String-Darstellungen pro Objekt mit dem Standardformatierer zu erstellen. Out-String
mangels -NoNewline
(ab v5.1; this GitHub issue schlägt vor, es einzuführen) würden immer nachfolgende Zeilenumbrüche führen.
Dies ist ein wichtiger Punkt! – briantist