2016-02-08 4 views

Antwort

22

In Powershell 5.0 und höher, verwenden Sie:

"TestTest" | Out-File -encoding ascii test.txt -NoNewline 

Aber in früheren Versionen, die Sie einfach nicht mit diesem Cmdlets.

Versuchen Sie folgendes:

[System.IO.File]::WriteAllText($FilePath,"TestTest",[System.Text.Encoding]::ASCII) 
2

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.

+1

Dies ist ein wichtiger Punkt! – briantist