Powershell Zeile zu viel
Eine simple PS Datei die Mailadressen sortieren soll.
Inhalt testeingabe.txt:
Genau 6 Zeilen...
Die Ausgabe hat allerdings 7 Zeilen(leerzeile)
Wie behebe ich das?
Inhalt testeingabe.txt:
"fe@eng.de
few@
giw@fiwej
jigw
gew@dar.com
ghio4@kl.de"
Die Ausgabe hat allerdings 7 Zeilen(leerzeile)
"fe@eng.de
few@
gew@dar.com
ghio4@kl.de
giw@fiwej
jigw
"
Wie behebe ich das?
$EingabePfad="C:\testeingabe.txt"
$AusgabePfad="C:\testausgabe.txt"
Function Eingabe{
if(Test-Path $EingabePfad)
{
$Global:EingabeDaten=Get-Content $EingabePfad
Write-Host "Eingaben eingelesen."
}
else{
$Global:EingabePfad=Read-Host "Der Pfad ist nicht korrekt. Bitte neuen Pfad eingeben"
Eingabe
}
}
Function Ausgabe{
if(Test-Path $AusgabePfad) # Loeschen der alten AusgabePfad, falls schon vorhanden.
{
Write-Host "Alte Ausgabedatei wird geloescht."
Remove-Item $AusgabePfad -Force
sleep 1
if(Test-Path $Ausgabepfad)
{
Write-Host "Ausgabedatei konnte nicht geloescht werden. Abbruch."
exit
}
}
else{
Write-Host "Eine alte Ausgabedatei existiert nicht."
}
Write-Host "Die Eingaben werden bearbeitet."
<# Leerzeichen und doppelte Eintraege entfernen und nach Alphabet sortieren#>
$EingabeDaten -Split("\s","") |Sort-Object |Get-Unique |
ForEach-Object{
$Global:n=$n+1
if($_ -ne "")
{
$Global:i=$i+1
Out-File -FilePath $AusgabePfad -Append -InputObject $_ -Encoding utf8 -Force # Anlegen der neuen AusgabePfad
Write-Host "schreibe in Zeile $i : $_"
}
else{
Write-Host "Zeile nicht geschrieben i,n,Inhalt: $i , $n , $_"
}
}
if(Test-Path $AusgabePfad)
{
Write-Host "Fertig. Die Ausgabe befindet sich hier:"
Write-Host "$AusgabePfad"
Write-Host "Es wurden $n Zeilen aus der Eingabe bearbeitet."
Write-Host "Es wurden $i Zeilen in die Ausagbe geschrieben."
}
else{
Write-Host "Keine Ausgabe erzeugt, bitte Eingaben, Pfade und Berechtigungen ueberpruefen."
}
}
Eingabe
Ausgabe
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 266075
Url: https://administrator.de/forum/powershell-zeile-zu-viel-266075.html
Ausgedruckt am: 03.04.2025 um 04:04 Uhr
5 Kommentare
Neuester Kommentar

Weil out-file -Append immer einen Zeilenumbruch am Ende der Zeile hinzufügt ;-,)
Folgende Methode tut das nicht ...
und wieso
$EingabeDaten -Split("\s","")
??? Die Daten sind schon in einem Array wenn du sie mit gc lädst. Leerzeichen löschst du mit
$EingabeDaten -replace '\s',''
Also z.B. so
Gruß jodel32
Folgende Methode tut das nicht ...
[io.file]::AppendAllText("C:\test.txt","DeinString")
$EingabeDaten -Split("\s","")
??? Die Daten sind schon in einem Array wenn du sie mit gc lädst. Leerzeichen löschst du mit
$EingabeDaten -replace '\s',''
Also z.B. so
# datei laden
$content = gc C:\temp\daten.txt
# eventuelle Leerzeichen ersetzen
$content = $content -replace "\s",""
# letzten Zeilenumbruch entfernen
$content = ($content | ?{$_ -ne ""} | out-string).TrimEnd("`r`n")
# file schreiben
[io.file]::WriteAllText("C:\temp\daten2.txt",$content)
# alternativ lässt sich der String auch so ohne Zeilenende schreiben
# Set-Content "C:\temp\daten2.txt" ([byte[]][char[]] $content) -Encoding Byte

?? Du hast hier nicht vernünftig geschrieben ob deine Daten in der Quell-Datei alle jeweils in einer separaten Zeile stehen oder alle in einer Zeile. machst du deswegen das Split "\s" ??
Wenn man es richtig macht geht das damit einwandfrei. Da du aber deine Quelldaten hier nicht richtig formatiert hast (Code-Tags ) ist dir schwer zu helfen, leider immer wieder das selbe hier!
Wird Zeit das @Frank endlich mal was dran tut das die User hier endlich alle die Formatierungen nutzen.
Wenn man es richtig macht geht das damit einwandfrei. Da du aber deine Quelldaten hier nicht richtig formatiert hast (Code-Tags ) ist dir schwer zu helfen, leider immer wieder das selbe hier!
Wird Zeit das @Frank endlich mal was dran tut das die User hier endlich alle die Formatierungen nutzen.

Zitat von @Marabunta:
dazu geschrieben hatte ich es bereits. Das eine hat 6 und das andere 7, nur die letzte leere die durch out-file -append erzeugt
und leer ist soll weg
Hatte ich oben geschrieben wie das geht.dazu geschrieben hatte ich es bereits. Das eine hat 6 und das andere 7, nur die letzte leere die durch out-file -append erzeugt
und leer ist soll weg
Mit den CMDLets out-file / add-Content etc. kommst du nicht weit, weil diese immer einen abschließenden Zeilenumbruch hinzufügen !!! kannst du überall im Web nachlesen.. Die Lösung dazu steht oben !
Wenn du das nicht glauben willst, dein Problem.