Prevenga la nueva línea final en el comando de salida de PowerShell
powershell-v2.0 (2)
En PowerShell 5.0+, usarías:
"TestTest" | Out-File -encoding ascii test.txt -NoNewline
Pero en versiones anteriores simplemente no puedes con ese cmdlet.
Prueba esto:
[System.IO.File]::WriteAllText($FilePath,"TestTest",[System.Text.Encoding]::ASCII)
¿Cómo evito que el comando Out-File PowerShell agregue una nueva línea después del texto que genera?
Por ejemplo, ejecutar el siguiente comando produce un archivo con el contenido "TestTest / r / n" en lugar de solo "TestTest".
"TestTest" | Out-File -encoding ascii test.txt
Para complementar la útil respuesta del -NoNewline
re -NoNewline
:
Lo siguiente se aplica no solo a Out-File
, sino también a Set-Content
/ Add-Content
; como se indica, -NoNewline
requiere PSv5 +.
Tenga en cuenta que -NoNewline
significa que con varios objetos para generar , no se suprime solo una nueva línea de seguimiento (salto de línea), sino cualquier nueva línea.
En otras palabras: las representaciones de cadena de los objetos de entrada se concatenan directamente, sin un separador (terminador) .
Por lo tanto, los siguientes comandos dan como resultado el mismo contenido del archivo ( TestTest
sin una nueva línea final):
# 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
Para colocar nuevas líneas solo entre , pero no también después de los objetos de salida, debe unir los objetos con nuevas líneas explícitamente :
"Test", "Test" -join "`r`n" | Out-File -encoding ascii test.txt -NoNewline
Para crear nuevas líneas LF de estilo Unix, use "`n"
lugar de "`r`n"
.
Advertencia :
La solución de la -join
anterior convierte de manera implícita los objetos de entrada en cadenas, si aún no lo están y lo hace llamando al .ToString()
.NET .ToString()
en cada objeto, que a menudo produce una representación diferente de la que Out-File
cree directamente, porque Out-File
utiliza el formateador de salida predeterminado de PowerShell; por ejemplo, compare los resultados de (Get-Date).ToString()
y solo Get-Date
.
Si su entrada comprende solo cadenas y / o no cadenas cuya representación .ToString()
es satisfactoria , la solución anterior funciona, pero tenga en cuenta que generalmente es preferible usar el cmdlet Set-Content
, que aplica la misma clasificación de forma implícita.
Para una discusión completa de las diferencias entre Out-File
y Set-Content
, vea esta respuesta mía.
Si su entrada tiene cadenas que no desea que se formateen tal como se imprimirían en la consola, en realidad no hay una solución simple: mientras que puede usar Out-String
para crear representaciones de cadena por objeto con el formateador predeterminado, Out-String
falta de -NoNewline
de -NoNewline
(a partir de v5.1; este problema de GitHub sugiere introducirla) invariablemente generaría nuevas líneas finales.