Powershell replace befehl?
Ich bin absoluter neuling mit powershell und versuche folgende Probleme in den griff zu bekommen.
Ich versuche eine txt dateien mit Powershell zu verändern und zwar muss folgendes verändert werden
1. Am ende jeder Zeile brfindet sich ein " ; " und das muss weg
2. die Erste Zeile soll gelöscht werden
bisher habe ich nur das hier
$Quelle="U:\Documents\DATEI.txt"
$Ziel="U:\Documents\DATEI.neu.txt"
$Datei = Get-ChildItem $Quelle
foreach ($String in $Datei)
{
$Inhalt = Get-Content -Path $String
$Inhalt | foreach {$_ -replace ";"," "}| Out-File -FilePath $Ziel -encoding Default
}
Das problem ist es verändert alle Smikolons.
Und wie man die erste Zeile löscht weis ich absolut nicht
Vielen Dank für eure hilfe
Ich versuche eine txt dateien mit Powershell zu verändern und zwar muss folgendes verändert werden
1. Am ende jeder Zeile brfindet sich ein " ; " und das muss weg
2. die Erste Zeile soll gelöscht werden
bisher habe ich nur das hier
$Quelle="U:\Documents\DATEI.txt"
$Ziel="U:\Documents\DATEI.neu.txt"
$Datei = Get-ChildItem $Quelle
foreach ($String in $Datei)
{
$Inhalt = Get-Content -Path $String
$Inhalt | foreach {$_ -replace ";"," "}| Out-File -FilePath $Ziel -encoding Default
}
Das problem ist es verändert alle Smikolons.
Und wie man die erste Zeile löscht weis ich absolut nicht
Vielen Dank für eure hilfe
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 168696
Url: https://administrator.de/forum/powershell-replace-befehl-168696.html
Ausgedruckt am: 21.04.2025 um 15:04 Uhr
8 Kommentare
Neuester Kommentar
Hallo Thomas86,
ich kann dir nur indirekt helfen bezüglich Powershell, weil ich damit nicht arbeite.
o.s.ä.
Beispiel in anderer Scriptsprache:
eventuell hilt dir das etwas weiter, sich mit Powershell auseinander zu setzen. Suche dir die Befehle raus, wie sie bei Powershell lauten
also: Split , LEFT oder RIGHT etc. , dann müßte es leicht funktionieren.

Gruss
Tsuki
ich kann dir nur indirekt helfen bezüglich Powershell, weil ich damit nicht arbeite.
1. Am ende jeder Zeile brfindet sich ein " ; " und das muss weg
Normalerweise kennen diese Scriptsprachen etwas wie:MeinText = "blablabla ;"
if Right$(MeinText, 1) = ";" then MeinText = Left$(MeinText, (Len(MeinText) -1))
2. die Erste Zeile soll gelöscht werden
auch bei Powershell müßte es etwas geben, womit man eine Datei komplett einlesen kann und dann die erste Zeile ausradiert.Beispiel in anderer Scriptsprache:
MeineZeilen = Split(FSO.opentextfile(MeineDatei).ReadAll,vbcrlf)
For i = 1 to Ubound(MeineZeilen)
Write (blablabla(i))
Next
.close
'etc
eventuell hilt dir das etwas weiter, sich mit Powershell auseinander zu setzen. Suche dir die Befehle raus, wie sie bei Powershell lauten
also: Split , LEFT oder RIGHT etc. , dann müßte es leicht funktionieren.
Das problem ist es verändert alle Smikolons.
Das hat der Replace-Befehl so ansich Gruss
Tsuki
Hallo Thomas86,
nochmal: ich kann dir bei den direkten Befehlen in Powershell nicht helfen, da ich sie nicht weiß.
du weißt da weitaus mehr!
Mach folgendes:
Datei öffnen und splitten und als SplitMerkmal nimmst du den Zeilenumbruch
Das ganze schreibt sich dann in eine Variable, welche ein Array sein müßte.
Nun hast du alle Zeilen in einem Array (von mir aus 100.000 Zeilen -> Ubound von diesem Array wäre dann 99.999)
Dann checkst du jede Zeile einzeln und entfernst ganz rechts das Zeichen ; , falls vorhanden.
Zum Schluss schreibst du die Daten in deine neue Datei und fängst ganz einfach bei 1 an zu starten,
weil die Arrays fangen bei NULL an!
Dann hast du alle Fliegen mit einer Klappe erschlagen!
In Powershell kann ich dir's nicht aufschreiben. Aber eventuell mal ein Beispiel in VBS:
Ungetestet und nur als Beispiel gedacht!!!!
Gruss
Tsuki
nochmal: ich kann dir bei den direkten Befehlen in Powershell nicht helfen, da ich sie nicht weiß.
du weißt da weitaus mehr!
Mach folgendes:
Datei öffnen und splitten und als SplitMerkmal nimmst du den Zeilenumbruch
Das ganze schreibt sich dann in eine Variable, welche ein Array sein müßte.
Nun hast du alle Zeilen in einem Array (von mir aus 100.000 Zeilen -> Ubound von diesem Array wäre dann 99.999)
Dann checkst du jede Zeile einzeln und entfernst ganz rechts das Zeichen ; , falls vorhanden.
Zum Schluss schreibst du die Daten in deine neue Datei und fängst ganz einfach bei 1 an zu starten,
weil die Arrays fangen bei NULL an!
Dann hast du alle Fliegen mit einer Klappe erschlagen!
In Powershell kann ich dir's nicht aufschreiben. Aber eventuell mal ein Beispiel in VBS:
Dim FSO
Dim DateiOriginal , DateiNeu
DateiOriginal = "U:\Documents\DATEI.txt"
DateiNeu = "U:\Documents\DATEI.neu.txt"
Set FSO = CreateObject("Scripting.FileSystemObject")
MeineZeilen = Split(FSO.opentextfile(DateiOriginal).ReadAll,vbcrlf) ' vbcrlf = Zeilenumbruch!
For i = 1 to Ubound(MeineZeilen) ' somit fangen wir bei Zeile 2 erst an, mitzuschreiben!
temp = MeineZeilen(i)
if Right(temp, 1) = ";" then temp = Left(temp, (Len(temp) -1))
temp = temp & vbcrlf
Next
MeineDateiNeu = FSO.CreateTextFile(DateiNeu,True).Write (temp)
Gruss
Tsuki
Hallo,
für das Replacen der ; hätte ich eine Idee, auch wenn ich mich nicht so mit Powershell auskenne:
Man könnte einfach sagen er soll alle Sekimkolons gefolgt von einem Zeilenumbruch/CrLf/010 013 (oder umgekehrt) durch einen simplen Zeilenumbruch ersetzen.
Also etwa MeinText.Replace(";" & vbcrlf,vbcrlf) in Powershellcode
Mathe172
für das Replacen der ; hätte ich eine Idee, auch wenn ich mich nicht so mit Powershell auskenne:
Man könnte einfach sagen er soll alle Sekimkolons gefolgt von einem Zeilenumbruch/CrLf/010 013 (oder umgekehrt) durch einen simplen Zeilenumbruch ersetzen.
Also etwa MeinText.Replace(";" & vbcrlf,vbcrlf) in Powershellcode
Mathe172
@tsuki
Anstatt immer den gesamten "temp"-String behandeln zu müssen würde ich nur die jeweilige Zeile kürzen, also etwa:
Ansonsten hätte der Vorschlag von mathe172 einiges für sich (besonders, wenn es um 100.000 Zeilen geht) ...
Grüße
bastla
Anstatt immer den gesamten "temp"-String behandeln zu müssen würde ich nur die jeweilige Zeile kürzen, also etwa:
For i = 1 to Ubound(MeineZeilen) ' somit fangen wir bei Zeile 2 erst an, mitzuschreiben!
L = Len(MeineZeilen(i))
If Right(MeineZeilen(i), 1) = ";" Then L = L - 1
temp = temp & Left(MeineZeilen(i), L) & vbCrLf
Next
Grüße
bastla
@bastla,
joh, das geht auch einfacher
Da gebe ich dir Recht! Danke für den Hinweis!
@mathe172
auch 'ne super Idee! Das stimmt! Warum nicht gleich das rechte Semiklolon in einen Zeilenumbruch verwandeln.
Noch einfacher
Wenn der TO jetzt noch jemanden findet, der unsere Ideen nach Powershell konvertiert, ist er sicher ganz glücklich
Gruss
Tsuki
joh, das geht auch einfacher
@mathe172
auch 'ne super Idee! Das stimmt! Warum nicht gleich das rechte Semiklolon in einen Zeilenumbruch verwandeln.
Noch einfacher
Wenn der TO jetzt noch jemanden findet, der unsere Ideen nach Powershell konvertiert, ist er sicher ganz glücklich
Gruss
Tsuki