Powershell Eine bestimmte Zeile in TXT Dateien auslesen, und ggf. Datei löschen
Hallo, und guten Morgen.
Ich möchte gern ein Verzeichnis mit mehreren TXT Dateien auslesen und ggf. bestimmte Dateien löschen lassen.
Hintergrund:
Bei dem Beispiel wird die 2 Zeile der TXT ausgegeben:
Jedoch wie ist es möglich, wenn z.B. die 2 Zeile von 1.txt und 3.txt identisch ist, dass 3.txt gleich gelöscht wird?
Danke für eine Hilfestellung.
Viele Grüße.
Ich möchte gern ein Verzeichnis mit mehreren TXT Dateien auslesen und ggf. bestimmte Dateien löschen lassen.
Hintergrund:
Bei dem Beispiel wird die 2 Zeile der TXT ausgegeben:
Get-Content "1.txt" -TotalCount 2 | Select-Object -Skip 1
Get-Content "2.txt" -TotalCount 2 | Select-Object -Skip 1
Get-Content "3.txt" -TotalCount 2 | Select-Object -Skip 1
Jedoch wie ist es möglich, wenn z.B. die 2 Zeile von 1.txt und 3.txt identisch ist, dass 3.txt gleich gelöscht wird?
Danke für eine Hilfestellung.
Viele Grüße.
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 4673321263
Url: https://administrator.de/contentid/4673321263
Ausgedruckt am: 19.11.2024 um 05:11 Uhr
8 Kommentare
Neuester Kommentar
Hallo,
vlt. mal ein paar Textbeispiele? So ist es auch statisch. Da wird nicht viel automatisch durchlaufen. Ist der Aufbau immer gleich? Wieviele Datein sind es? Ändern sich die Dateinamen - also nicht durchnummeriert? Bsp. ist immer gut, aber wenn es nur wage die Sache skizziert nicht hilfreich!
Du müssttest irgendwo anfangen. Reihenfolge? Dateiname oder Datum? Dann den 1. Wert als Referenz speichern. Bei iterieren der anderen Dateien vergleichen und wenn ein match da ist die Datei an der Stelle löschen.
Was ist mit der Zeichenencodierung? Hat der Text Umlaute? Ggf. müsste das für andere Aktionen auch noch abgefangen werden. Zeig mal "echte" Beispiele + Inhalt.
vlt. mal ein paar Textbeispiele? So ist es auch statisch. Da wird nicht viel automatisch durchlaufen. Ist der Aufbau immer gleich? Wieviele Datein sind es? Ändern sich die Dateinamen - also nicht durchnummeriert? Bsp. ist immer gut, aber wenn es nur wage die Sache skizziert nicht hilfreich!
Du müssttest irgendwo anfangen. Reihenfolge? Dateiname oder Datum? Dann den 1. Wert als Referenz speichern. Bei iterieren der anderen Dateien vergleichen und wenn ein match da ist die Datei an der Stelle löschen.
Was ist mit der Zeichenencodierung? Hat der Text Umlaute? Ggf. müsste das für andere Aktionen auch noch abgefangen werden. Zeig mal "echte" Beispiele + Inhalt.
Hallo,
muss ich kurz drüber nachdenken! Da es mehrere Werte sind müsste man die alle speichern und vergleichen. Also Hastable oder Array. Den nur aktualisiseren, wenn der Wert noch nicht im Array steht. Ist er vorhanden gab es die Datei schon. Dann kann man also sofort löschen, da es eine Doublette ist. Weiß nur nicht wie performant das ist. Geht auf jedenfall. Müsste ich aber erst nachbauen.
1. Array mit Werte 2. Zeile füllen
2. Nach einlesen vergleichen, ob der Value schon vorhanden ist
- NEIN: Array Update und Datei überspringen
- JA: aktuelle Datei löschen
Du brauchst hier ja eine Datenbank mit Referenzwerten. Datebank ist grob formuliert. Objekt das gefundene Werte ohne Redundanz vorhält reicht doch aus....
muss ich kurz drüber nachdenken! Da es mehrere Werte sind müsste man die alle speichern und vergleichen. Also Hastable oder Array. Den nur aktualisiseren, wenn der Wert noch nicht im Array steht. Ist er vorhanden gab es die Datei schon. Dann kann man also sofort löschen, da es eine Doublette ist. Weiß nur nicht wie performant das ist. Geht auf jedenfall. Müsste ich aber erst nachbauen.
1. Array mit Werte 2. Zeile füllen
2. Nach einlesen vergleichen, ob der Value schon vorhanden ist
- NEIN: Array Update und Datei überspringen
- JA: aktuelle Datei löschen
Du brauchst hier ja eine Datenbank mit Referenzwerten. Datebank ist grob formuliert. Objekt das gefundene Werte ohne Redundanz vorhält reicht doch aus....
Get-ChildItem "D:\Ordner" -File -Filter *.txt | sort LastWriteTime | group {(Get-Content $_.Fullname -TotalCount 2)[1]} | ? Count -gt 1 | %{$_.Group | select -skip 1 | remove-item -verbose}