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-Key: 356777

Url: https://administrator.de/contentid/356777

Printed on: April 27, 2024 at 02:04 o'clock

Member: emeriks
emeriks Dec 01, 2017 at 15:54:41 (UTC)
Goto Top
Hi,
Versuche mit Powershell d...
Und wie sehen diese Versuche bisher aus?

E.
Member: colinardo
colinardo Dec 01, 2017 updated at 16:04:52 (UTC)
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
Member: dwaldmannDE
dwaldmannDE Dec 01, 2017 at 16:01:49 (UTC)
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!
Member: Frank2017
Frank2017 Dec 01, 2017 at 16:12:27 (UTC)
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!!
Member: colinardo
Solution colinardo Dec 01, 2017 updated at 16:17:06 (UTC)
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
}
Member: Frank2017
Frank2017 Dec 01, 2017 at 16:19:53 (UTC)
Goto Top
Hallo colinardo!

Allerbesten Dank!!

Läuft absolut top!

Danke, danke!!!!!!!!