Lorsque vous utilisez set-content Set-Content C:\test.txt "test","test1"
par défaut, les deux chaînes fournies sont séparées par une nouvelle ligne, mais il y a également une nouvelle ligne à la fin du fichier. Comment ignorer cette nouvelle ligne ou nouvelle ligne avec des espaces lors de l'utilisation de Get-Content?powershell get-content ignore newline
Répondre
Vous pouvez supprimer la ligne vide comme ceci:
Set-Content C:\test.txt "test",'',"test1"
Get-Content c:\test.txt | ? { $_ }
Cependant, il supprime la chaîne au milieu aussi bien.
Editer: En fait, comme j'ai essayé l'exemple, j'ai remarqué que Get-Content
ignore la dernière ligne vide ajoutée par Set-Content
.
Je pense que votre problème est dans Set-Content
. Si vous utilisez avec solution de contournement WriteAllText
, il fonctionne très bien:
[io.file]::WriteAllText('c:\test.txt', ("test",'',"test1" -join "`n"))
Vous passez une chaîne en tant que second paramètre. C'est pourquoi j'ai d'abord rejoint les chaînes via -join
puis l'ai passé à la méthode.
Remarque: ce n'est pas recommandé pour les fichiers volumineux, en raison de la concaténation de chaînes qui n'est pas efficace.
C'est un comportement par défaut que Set-Content ajoute une nouvelle ligne car il permet de définir un contenu avec des tableaux de chaînes et de les obtenir un par ligne. Quoi qu'il en soit, Get-Content ignore la dernière "nouvelle ligne" (s'il n'y a pas d'espace derrière). travail autour de Set-Content:
([byte[]][char[]] "test"), ([byte]13), ([byte]10) ,([byte[]][char[]] "test1") |
Set-Content c:\test.txt -Encoding Byte
ou utiliser beaucoup plus simple [io.file] :: WriteAllText
peut vous indiquer la situation exacte (ou code)?
par exemple si vous voulez ignorer la dernière ligne lors de l'obtention du contenu, il ressemblerait à ceci:
$content = Get-Content c:\test.txt
$length = ($content | measure).Count
$content = $content | Select-Object -first ($length - 1)
mais si vous faites juste:
"test","test1" | Set-Content C:\test.txt
$content = Get-Content C:\test.txt
la variable $ content contient deux éléments: "test », "test1"
Get-Content C:\test.txt | Where-Object {$_ -match '\S'}
La méthode [' WriteAllLines'] (http://msdn.microsoft.com/en-us/library/system.io.file.writealllines.aspx) travaux avec des collections, évitant le besoin de «joindre» le tableau en une seule chaîne: '[IO.File] :: WriteAllLines ('c: \ test.txt', (" test ", ''," Test1 ")) ' –