web-dev-qa-db-fra.com

Out-File -append dans Powershell ne produit pas de nouvelle ligne et casse la chaîne en caractères

J'essaie de comprendre un comportement étrange avec cette applet de commande.

Si j'utilise "Out-File -append Filename.txt" sur un fichier texte que j'ai créé et entré du texte via le menu contextuel de Windows, la chaîne s'ajoutera à la dernière ligne de ce fichier sous la forme d'une série de caractères séparés par des espaces.

Alors:

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

Produira: T h i s i s a t e s t

Cela n'arrivera pas si out-file crée le fichier, ou si le fichier texte ne contient pas de texte avant l'ajout. Pourquoi cela arrive-t-il?

Je noterai également que la répétition de la commande s'ajoutera simplement de la même manière à la même ligne. Je suppose qu'il ne reconnaît pas les terminaisons de saut de ligne ou de saut de ligne ou quelque chose en raison d'un encodage modifié?

10
BSAFH

Out-File par défaut au codage unicode, c'est pourquoi vous voyez le comportement que vous êtes. Utilisation -Encoding Ascii pour modifier ce comportement. Dans ton cas

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

Add-Content utilise Ascii et ajoute également par défaut.

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

Quant au manque de retour à la ligne: vous n'avez pas envoyé de retour à la ligne donc il n'en écrit pas dans le fichier.

22
Matt

Add-Content est par défaut ASCII et ajoutez une nouvelle ligne, mais Add-Content entraîne également des problèmes de fichiers verrouillés.

0
Nando