frank2017
Goto Top

Powershell: Das erste Wort einer txt-Datei in zwei weiteren txt-Dateien an erster Stelle kopieren

Hallo!

Versuche mit Powershell das erste Wort aus einer txt-Datei im 1. Ordner in zwei weiteren txt-Dateien im 2.Ordner an erster Stelle zu kopieren.

Ausgangssituation:

1.Ordner
txt-Datei Inhalt=
Stadt
Land
Fluß

2. Ordner
1.txt-Datei=
Land
Fluß

2.txt-Datei=
Hund
Katze


Ziel ist es:

1.Ordner
txt-Datei Inhalt=
Stadt
Land
Fluß

2. Ordner
1.txt-Datei=
Stadt
Land
Fluß

2.txt-Datei=
Stadt
Hund
Katze


Ich hoffe ihr könnt mir diesesmal auch wieder weiterhelfen.

Vielen Dank.

Content-ID: 356777

Url: https://administrator.de/forum/powershell-das-erste-wort-einer-txt-datei-in-zwei-weiteren-txt-dateien-an-erster-stelle-kopieren-356777.html

Ausgedruckt am: 06.04.2025 um 01:04 Uhr

emeriks
emeriks 01.12.2017 um 16:54:41 Uhr
Goto Top
Hi,
Versuche mit Powershell d...
Und wie sehen diese Versuche bisher aus?

E.
colinardo
colinardo 01.12.2017 aktualisiert um 17:04:52 Uhr
Goto Top
Servus @Frank2017,
Wenn du mit Wort = Zeile meinst dann:
$file1 = 'D:\original.txt'  
$folder = 'D:\OrdnerX'  
# Erste Zeile der Datei auslesen
$line1 = gc $file1 -TotalCount 1
# Alle Textdateien des Ordners verarbeiten
gci $folder -File -Filter *.txt | %{
    # prepend der Zeile an den Inhalt der Datei
    @($line1,(gc $_.Fullname -ReadCount 1000)) | sc $_.Fullname
}
Sollten mehrere Wörter nebeneinander in der ersten Zeile stehen und du brauchst wirklich nur das erste Wort der Zeile dann Zeile 4 oben ändern in
$line1 = @((gc $file1 -TotalCount 1) -split '\s+')
Grüße Uwe
dwaldmannDE
dwaldmannDE 01.12.2017 um 17:01:49 Uhr
Goto Top
Hallo!

die Logik, die du brauchst sieht in etwa so aus:


#Original .txt Datei einlesen
$RootFile = Get-Content -Path Ordner1\1.txt
#Datei 1 aus Ordner 2 einlesen
$File1 = Get-Content -Path Ordner2\1.txt
#Datei 2 aus Ordner 2 einlesen 
$File2 = Get-Content -Path Ordner2\2.txt

#Den Inhalt an jedem "Leerzeichen" trennen 
$RootFile = $RootFile -split "\s+"   

#Das erste Element aus $RootFile vorne an den eingelesenen String aus $File1 bzw. $File2 
#anfügen und wieder in die Datei schreiben

($RootFile + $File1) | Out-File -FilePath Ordner2\1.txt
($RootFile + $File2) | Out-File -FilePath Ordner2\2.txt

Du liest alle drei Dateien in einen String ein. Für die Quelldatei trennst du den String an „Leerzeichen“ auf, um das erste Wort zu bekommen. Anschließend stellst du das erste Wort aus der Quelldatei dem Inhalt der anderen beiden Dateien voran.

Viele Grüße!
Frank2017
Frank2017 01.12.2017 um 17:12:27 Uhr
Goto Top
Hallo colinardo!

Versuche gerade dein Lösung.

Beim ersten mal klappt es einwandfrei.
Lasse ich es aber ein zweites mal durchlaufen, da schreibt er das erste Wort nochmal rein.

Kann man das noch verhindern? Dann wäre es perfekt!!
colinardo
Lösung colinardo 01.12.2017 aktualisiert um 17:17:06 Uhr
Goto Top
Zitat von @Frank2017:
Lasse ich es aber ein zweites mal durchlaufen, da schreibt er das erste Wort nochmal rein.
Anforderung stand ja nicht da face-wink.
Kann man das noch verhindern? Dann wäre es perfekt!!
Klar, kein Problem:
$file1 = 'D:\original.txt'  
$folder = 'D:\OrdnerX'  
# Erste Zeile der Datei auslesen
$line1 = gc $file1 -TotalCount 1
# Alle Textdateien des Ordners verarbeiten
gci $folder -File -Filter *.txt | ?{(gc $_.Fullname) -notcontains $line1} | %{
    @($line1,(gc $_.Fullname -ReadCount 1000)) | sc $_.Fullname
}
Frank2017
Frank2017 01.12.2017 um 17:19:53 Uhr
Goto Top
Hallo colinardo!

Allerbesten Dank!!

Läuft absolut top!

Danke, danke!!!!!!!!