In Textdateien String suchen und ersetzen
Hallo,
ich habe folgendes Problem. Ich habe ein Verzeichnis in dem viele verschiedene Dateien liegen. Darunter auch Textdateien.
Diese sind immer gleich aufgebaut und enthalten zweimal ein Datum ungefähr so:
Text
Text
ErstesDatum=01.01.2018
Text
Text
Text
Text
ZweitesDatum=20.08.2015
Text
...
Nun muss das Zweite Datum von unten das ErsteDatum oben ersetzen. Also als Ergebnis ungefähr so:
Text
Text
ErstesDatum=20.08.2015
Text
Text
Text
Text
ZweitesDatum=20.08.2015
Text
...
Das Ersetzen des Datums muss in allen diesen Dateien (insges. über 200.000) erfolgen.
Irgendwie bekomme ich das aber nicht hin. Würde mich über eure Hilfe freuen. Danke.
ich habe folgendes Problem. Ich habe ein Verzeichnis in dem viele verschiedene Dateien liegen. Darunter auch Textdateien.
Diese sind immer gleich aufgebaut und enthalten zweimal ein Datum ungefähr so:
Text
Text
ErstesDatum=01.01.2018
Text
Text
Text
Text
ZweitesDatum=20.08.2015
Text
...
Nun muss das Zweite Datum von unten das ErsteDatum oben ersetzen. Also als Ergebnis ungefähr so:
Text
Text
ErstesDatum=20.08.2015
Text
Text
Text
Text
ZweitesDatum=20.08.2015
Text
...
Das Ersetzen des Datums muss in allen diesen Dateien (insges. über 200.000) erfolgen.
Irgendwie bekomme ich das aber nicht hin. Würde mich über eure Hilfe freuen. Danke.
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 454380
Url: https://administrator.de/forum/in-textdateien-string-suchen-und-ersetzen-454380.html
Ausgedruckt am: 13.04.2025 um 22:04 Uhr
7 Kommentare
Neuester Kommentar
Moin,
ungefähr hilft ungefähr gar nicht. Poste bitte ein anonymisiertes 1:1-Beispiel
Gruß
ungefähr hilft ungefähr gar nicht. Poste bitte ein anonymisiertes 1:1-Beispiel
Das Ersetzen des Datums muss in allen diesen Dateien (insges. über 200.000) erfolgen.
an sich kein Problem, wenn der Aufbau der Datei das her gibt - siehe mein 1. kommentarIrgendwie bekomme ich das aber nicht hin. Würde mich über eure Hilfe freuen. Danke.
klar. Zeig mal, was du bisher hastGruß
Zitat von @Browserlauser:
get-ChildItem *.txt | Foreach-Object {Get-Content $_ | Out-String | Foreach-Object {($Datum1.Replace,$Datum2)} | Set-Content $_}
get-ChildItem *.txt | Foreach-Object {Get-Content $_ | Out-String | Foreach-Object {($Datum1.Replace,$Datum2)} | Set-Content $_}
ganz so einfach geht das nicht
1
2
3
4
5
6
7
8
9
10
11
12
13
14
2
3
4
5
6
7
8
9
10
11
12
13
14
Get-ChildItem -Path "C:\temp\4" -Filter "*.txt" | ForEach-Object {
$FileName=$_.FullName
$Document=Get-Content $FileName
$Document | %{
if ($_ -match "ErstesDatum=(\d{2}.\d{2}.\d{4})" -eq $true){
$ErstesDatum=$Matches[1]
}
if ($_ -match "ZweitesDatum=(\d{2}.\d{2}.\d{4})" -eq $true){
$ZweitesDatum=$Matches[1]
}
}
$Document=$Document.replace("ErstesDatum=$ErstesDatum","ErstesDatum=$ZweitesDatum")
Set-Content -Value $Document -Path $FileName
}
Falls man PowerShell5 (ab W10) oder Core (Multiplattform) hat:
Der Code hat aber keinerlei fehlerhandling, also use with caution
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#Alle Dateien einsammeln
$Files = Get-ChildItem "C:\pfad\zu\den\datein\"
#den Code für jede Datei ausführen
foreach ($File in $Files) {
#Inhalt einlesen
$Inhalt = Get-Content $File
#Muster 'irgendwelche buchstaben mehrfach, dannach ein gleich, dannach ein datum, wobei nur das Datum als match ansehen' suchen
$RegExPattern = '(?<=\w+\=)\d{2}\.\d{2}\.\d{4}'
#Im Text nach nach Muster suchen
$Result = [regex]::Matches($Inhalt, $RegExPattern)
#das erste vorkommen (0 = erster eintrag im array) des musters in die Variable ErstesDatum schreiben, das zweite vorkommen in ZweitesDatum schreiben
$ErstesDatum = $Result.Value; $ZweitesDatum = $Result[1].Value
#Inhalt modifizieren, indem das erste vorkommen mit dem zweiten vorkommen ersetzt wird
$Inhalt = $Inhalt -replace "$ErstesDatum","$ZweitesDatum"
# den modifizierten inhalt zurück in die datei schreiben
Set-Content -Path $File -Value $Inhalt
}
Der Code hat aber keinerlei fehlerhandling, also use with caution
Wenn es mal nur das wäre. Dein Ansatz geht davon aus, dass erstens die o.g. Reihenfolge eingehalten wird UND zweitens das Datum nur einmal in der Datei vorkommt.