frank2017
Goto Top

Powershell Inhalt von TXT Dateien in zwei Ordnern vergleichen und bei Unstimmigkeit löschen

Hallo!

Möchte mit Powershell den Inhalt von txt Dateien in zwei Ordnern vergleichen und bei Unstimmigkeit löschen.

1. Ordner enthält: 1 Datei "favoriten.txt" in der txt-Datei sind mehrere einzelne Wörter. Diese möchte ich mit dem anderen Ordner erstmal vergleichen.

z.B. favoriten.txt=
1. Wort=test1
2. Wort=test2
3. Wort=test3
4. Wort=test4


2. Ordner enthält: 2 Dateien mit unterschiedlichen txt-Dateinamen. In jeder txt-Datei sind unterschiedliche Wörter.

z.B: txt-Datei1=
1. Wort=test1
2. Wort=test2
3. Wort=test7
4. Wort=test8

z.B. txt-Datei2=
1. Wort=test3
2. Wort=test4
3. Wort=test9


Alle Wörter in "favoriten.txt" kommen im 2. Ordner in den 2 Dateien vor. Nun sollen die Wörter die nicht vorkommen gelöscht werden. In diesem Beispiel also aus txt-Datei 1= 3.Wort=7 & 4. Wort=8. Weiterhin aus txt-Datei 2 = 3. Wort=test9


Ziel ist es:

Die Wörter der "favoriten.txt" die im 1.Ordner sind sollen mit dem im 2. Ordner verglichen werden. Falls der Inhalt des 1. Ordners nicht gleich ist im 2. Ordner, sollen alle andern inhalte im 2. Ordner gelöscht werden.


So ich hoffe ich konnte es eingermaßen erklären was ich möchte. Ich hoffe es gibt eine Lösung dafür.

Danke schön.

Gruß Frank

Content-Key: 356530

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

Printed on: April 16, 2024 at 15:04 o'clock

Mitglied: 134464
134464 Nov 29, 2017, updated at Nov 30, 2017 at 07:27:25 (UTC)
Goto Top
$favorites = gc 'C:\favorites.txt'  

gci 'D:\Folder\*.txt' -File | %{  
    $file2 = gc $_.Fullname
    compare $file2 $favorites -IncludeEqual -ExcludeDifferent -PassThru -EA Ignore | sc $_.Fulname
}

Und offline...
Member: Frank2017
Frank2017 Nov 29, 2017 at 17:57:57 (UTC)
Goto Top
Leider funktioniert es nicht ganz.

Er löscht im 2. Ordner bei der entsprechenden txt-Datei nicht den Datei-Inhalt.
Member: Frank2017
Frank2017 Nov 29, 2017 at 19:10:55 (UTC)
Goto Top
Muss mich etwas korrigieren!

Und zwar löscht er doch. Aber nur wenn im 2. Ordner zwei Wörter vorhanden sind. Wenn nur ein Wort vorhanden ist bleibt das Wort bestehen.

Also soweit funktioniert es ja, nur nicht wenn nur ein Wort in der txt-Datei vorhanden ist.

Oder könnte man die entsprechende txt-Datei komplett löschen? Geht das?
Member: Frank2017
Frank2017 Nov 30, 2017 updated at 15:11:22 (UTC)
Goto Top
Leider funktioniert es immer noch nicht.

Der betreffende 2. Ordner mit der entsprechenden txt-Datei wird nicht aktualisiert. Das sehe ich am Datum der txt-Dateien. Bei den anderen aktualisiert er das Datum, obwohl dort keine Veränderung stattgefunden hat. Merkwürdig ??

EDIT:

Also fakt ist: Das zwei Dateien in einer txt-Datei sein müssen. Bei einer Datei löscht er nämlich nicht.
Beim Test mit einem leeren 2. Ordner meckert Powershell mit dieser Meldung:

Compare-Object : Das Argument kann nicht an den Parameter "ReferenceObject" gebunden werden, da es NULL ist.
Member: colinardo
Solution colinardo Dec 02, 2017 updated at 14:40:18 (UTC)
Goto Top
Servus Frank,
das sollte nach deiner Beschreibung so aussehen:
$favorites = @(gc 'D:\ordner1\original.txt')  
$folder = 'D:\ordner2'  
gci $folder -Filter *.txt -File | %{
    $content = @(gc $_.Fullname)
    compare $favorites $content -IncludeEqual -ExcludeDifferent -PassThru | out-file $_.Fullname -Force
}
Grüße Uwe
Member: Frank2017
Frank2017 Dec 02, 2017 at 13:46:58 (UTC)
Goto Top
Hallo Uwe!

Danke für deine antwort.

Die Fehlermeldung mit dem leeren Ordner kommt nicht mehr. Top!

Nur noch eine sache:

Problem:

Das im 2. Ordner zwei Dateien in einer txt-Datei sein müssen. Bei einer Datei im 2. Ordner löscht er nämlich nicht.

Könntest du nochmal nachschauen.

Danke schön.
Member: colinardo
colinardo Dec 02, 2017 updated at 14:07:18 (UTC)
Goto Top
Zitat von @Frank2017:
Problem:
Bei einer Datei im 2. Ordner löscht er nämlich nicht.
Nein, definitiv doch! Der Grund: hier arbeitet eine simple Foreach-Schleife alle Dateien des Ordners ab, seien es keine, eine oder mehrere das ist vollkommen egal. Vermutlich hast du auch Leerzeichen vor den Zeilenumbrüchen in den Files.
Wenn die Datei schreibgeschützt ist, ist der Force Parameter nötig den ich oben hinzugefügt habe.
Das im 2. Ordner zwei Dateien in einer txt-Datei sein müssen
Zwei Dateien in einer Textdatei?? Wie soll das bitteschön gehen face-smile??
Member: Frank2017
Frank2017 Dec 02, 2017 at 14:07:11 (UTC)
Goto Top
Zitat von @colinardo:

Zitat von @Frank2017:
Zwei Dateien in einer Textdatei?? Wie soll das bitteschön gehen face-smile??

Entschuldige, ich meinte:

Zwei Wörter in einer Textdatei und nicht Dateien.
Member: colinardo
colinardo Dec 02, 2017 updated at 14:13:44 (UTC)
Goto Top
Das ist egal wieviel drin steht, aber ich denke du willst wenn garnichts in einer Datei übereinstimmt der Inhalt dieser komplett gelöscht wird, diesen Fall habe ich oben im Code noch ergänzt.
Member: Frank2017
Frank2017 Dec 02, 2017 at 14:15:59 (UTC)
Goto Top
Genau so meinte ich das!

Perfekt! Vielen Dank.

Ohne dich hätte ich das nicht hinbekommen! Danke
Member: colinardo
colinardo Dec 02, 2017 updated at 14:32:37 (UTC)
Goto Top
Bitte, keine Ursache face-smile.

Schönes Wochenende
Grüße Uwe
Member: Frank2017
Frank2017 Dec 02, 2017 at 15:02:30 (UTC)
Goto Top
Ich wünsche Dir auch ein schönes Wochenende!

Gruß Frank