2016-02-08 24 views

risposta

22

In PowerShell 5.0 +, si può usare:

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

Ma nelle versioni precedenti semplicemente non è possibile con questo cmdlet.

Prova questo:

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

Per complementobriantist's helpful answer re -NoNewline:

Quanto segue si applica non solo ai Out-File, ma analogamente a Set-Content/Add-Content pure; come indicato, -NoNewline richiede PSv5 +.

noti che -NoNewline significa che con multipli oggetti nell'output, non è solo un trascinamento nuova riga (interruzione di riga) che viene soppressa, ma eventuali nuove righe.

In altre parole: le rappresentazioni di stringa degli oggetti di input sono concatenate direttamente, senza un separatore (terminatore).

Pertanto, i seguenti comandi provoca lo stesso contenuto del file (TestTest senza fine riga):

# 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 

al fine di Consiglio newlines solo tra, ma non anche dopo dell'uscita oggetti, è necessario unire gli oggetti con newlines in modo esplicito:

"Test", "Test" -join "`r`n" | Out-File -encoding ascii test.txt -NoNewline 

Per creare newline LF solo stile Unix, utilizzare "`n" anziché "`r`n".

Caveat:

La soluzione sopra -join converte implicitamente oggetti in ingresso, stringhe, se non sono già e lo fa chiamando il metodo NET .ToString() su ciascun oggetto, che spesso produce una diversa rappresentazione rispetto a quella che Out-File creerebbe direttamente, perché Out-File utilizza il formatter di output predefinito di PowerShell; ad esempio, confrontare le uscite di (Get-Date).ToString() e solo Get-Date.

Se l'ingresso comprende solo stringhe e/o non-stringhe cui .ToString() rappresentazione è soddisfacente, la soluzione di cui sopra funziona, ma nota che è allora generalmente preferibile utilizzare il Set-Content cmdlet, che applica lo stesso in stringa implicitamente.
Per una discussione completa delle differenze tra Out-File e Set-Content, vedere this answer di mine.

Se il vostro input ha i non-stringhe che si desidera essere formattato come avrebbero stampare alla console, non v'è in realtà alcuna soluzione semplice: mentre è possibile utilizzare Out-String per creare rappresentazioni di stringa per-oggetto con il formattatore predefinito, La mancanza di Out-String di -NoNewline (a partire dalla v5.1; this GitHub issue suggerisce di introdurla) produrrebbe invariabilmente una nuova riga finale.

+1

Questo è un punto importante! – briantist