alexfm
Goto Top

Powershell Skript Datei mit bestimmten Inhalt finden und dann Datei löschen

Hallo Mitnander,

Ich versuche vergeblich mit der Powershell Dateien zu löschen die einen bestimmten Textinhalt haben..
Mein bisheriges Script:

If (Get-childitem "PFAD\*" | select-string -pattern 'Datei wurde fehlerfrei verarbeitet','Die Datei konnte ohne Kernprüffehler verarbeitet werden')
{
Remove-Item -Path "PFAD"\*

}

Natürlich wird der gesmate Inhalt des Ordners gelöscht. Weis jemand wie ich nur die Dateien lösche die den angegebenen String enthalten?

Content-ID: 614776

Url: https://administrator.de/forum/powershell-skript-datei-mit-bestimmten-inhalt-finden-und-dann-datei-loeschen-614776.html

Ausgedruckt am: 30.12.2024 um 17:12 Uhr

emeriks
emeriks 21.10.2020 um 14:17:43 Uhr
Goto Top
Hi,
das wird so nicht funktionieren.
Du willst doch sicherlich folgendes umsetzen:
1. alle Dateien auflisten
2. für jede:
a) Einlesen
b) Treffer suchen
c) wenn Treffer-Anzahl > 0, dann Datei löschen

Führe doch einfach mal nur das aus:
Get-childitem "PFAD\*" | select-string -pattern 'Datei wurde fehlerfrei verarbeitet','Die Datei konnte ohne Kernprüffehler verarbeitet werden'  
und schau Dir das Ergebnis an. Und dann überlege mal, warum das "IF" damit nicht funktioniert.

Außerdem
Remove-Item -Path "PFAD"\*  
ist eine von allem anderen vollkommen unabhängige Anweisung, alle Dateien im "PFAD" zu löschen. Da musst Du Dich nicht wundern.

E.
AlexFM
AlexFM 21.10.2020 um 14:38:08 Uhr
Goto Top
Hi Emirks,

Get-childitem "PFAD\*" | select-string -pattern 'Datei wurde fehlerfrei verarbeitet','Die Datei konnte ohne Kernprüffehler verarbeitet werden'

Die Dateien werden mir folgend angezeigt:

C:\PFAD\TESTZIEL\Neues Textdokumen2t:4:Die Datei konnte ohne Kernprüffehler verarbeitet werden
C:\PFAD\TESTZIEL\Neues Textdokument:3:Datei wurde fehlerfrei verarbeitet

Nur wie kann ich diese Datein dann auch löschen?
Bin noch nicht sehr lange in diesem Beruf, daher sorry das ich die Syntax nicht hundert prozentig verstehe face-sad

Und danke schonmal für deine Rückmeldung
emeriks
emeriks 21.10.2020 um 14:41:38 Uhr
Goto Top
AlexFM
AlexFM 21.10.2020 um 15:00:04 Uhr
Goto Top
Danke für den Link, konnte nur leider kein Ergenis mit den Vorschlägen der Seite erzielen...
emeriks
emeriks 21.10.2020 um 15:39:23 Uhr
Goto Top
Zitat von @AlexFM:
Danke für den Link, konnte nur leider kein Ergenis mit den Vorschlägen der Seite erzielen...
Wirklich nicht?!
Get-ChildItem PFAD | Select-String 'Datei wurde fehlerfrei verarbeitet','Die Datei konnte ohne Kernprüffehler verarbeitet werden' -List | Select Path  
... liefert Dir die Pfade der gefundenen Dateien. Oder nicht?
Hinten dran ein ForEach und fertig.
emeriks
emeriks 21.10.2020 um 15:41:21 Uhr
Goto Top
Sind das Unicode- oder ASCII-Dateien?
AlexFM
AlexFM 21.10.2020 um 15:50:34 Uhr
Goto Top
Get-ChildItem PFAD | Select-String 'Datei wurde fehlerfrei verarbeitet','Die Datei konnte ohne Kernprüffehler verarbeitet werden' -List | Select Path

Gibt aus:

C:\Pfad\TESTZIEL\Neues Textdokumen2t
C:\Pfad\TESTZIEL\Neues Textdokument

Das ist der Pfad mit Dateinamen, richtig.

Und nun?

Beide Dateien müssen aber noch gelöscht werden...

Das finden und ausgeben hab ich schon auf bestimmt fünf verschiedenen wegen hinbekommen nur leider nicht das die gefundenen Datein gelöscht werden face-sad
AlexFM
AlexFM 21.10.2020 um 16:04:07 Uhr
Goto Top
Unicode
Daemmerung
Daemmerung 21.10.2020 aktualisiert um 17:54:03 Uhr
Goto Top
Jetzt hängst du da noch ein
 | Foreach { Remove-Item -path $_ -force} 
dran. Ist nicht getestet und beachte bitte, dass du dann auch löschst. Teste es also mit Testdateien, vor allem dann, wenn du neu in dem Bereich bist.

Viele Grüße
Daemmerung
AlexFM
AlexFM 22.10.2020 aktualisiert um 08:57:11 Uhr
Goto Top
Moin Daemmerung,

Habe deine Syntax beigefügt.

Gesamte Syntax:

Get-childitem "C:\Pfad\TESTZIEL\*" | select-string "Datei wurde fehlerfrei verarbeitet","Die Datei konnte ohne Kernprüffehler verarbeitet werden" -List | Select Path | Foreach {Remove-Item -Path $_ -force}

Fehlermeldung:

Remove-Item : Das Laufwerk wurde nicht gefunden. Ein Laufwerk mit dem Namen "@{Path=C" ist nicht vorhanden.
In C:\Users\Benutzer\Desktop\Unbenannt5.ps1:1 Zeichen:182

back-to-top... t werden" -List | Select Path | Foreach {Remove-Item -Path $_ -force}

back-to-top~~~~~~~~~~~~~~~~~~~~~~~~~~~

+ CategoryInfo : ObjectNotFound: (@{Path=C:String) [Remove-Item], DriveNotFoundException
+ FullyQualifiedErrorId : DriveNotFound,Microsoft.PowerShell.Commands.RemoveItemCommand

Jetzt bin ich komplett verwirrt..
emeriks
Lösung emeriks 22.10.2020 aktualisiert um 09:07:39 Uhr
Goto Top
Benutze doch bitte Code-Tags!

Korrekt muss es lauten:
Get-childitem "C:\Pfad\TESTZIEL\*" | select-string "Datei wurde fehlerfrei verarbeitet","Die Datei konnte ohne Kernprüffehler verarbeitet werden" -List | Select Path | Foreach {Remove-Item -Path $_.Path -force}  
Beachte das "$_.Path" im letzten Befehl.
AlexFM
AlexFM 22.10.2020 um 09:07:30 Uhr
Goto Top
das bringt auch keine Veränderung face-sad
AlexFM
AlexFM 22.10.2020 um 09:09:20 Uhr
Goto Top
Bester face-smile

Vielen Dank für deine (eure) Hilfe.

Einen schönen Tag euch face-smile
emeriks
emeriks 22.10.2020 um 09:09:44 Uhr
Goto Top
Zitat von @AlexFM:
das bringt auch keine Veränderung face-sad
???
AlexFM
AlexFM 22.10.2020 um 09:17:29 Uhr
Goto Top
doch doch, hat gepasst. Vielen Danke face-smile
AlexFM
AlexFM 22.10.2020 um 10:06:39 Uhr
Goto Top
Eine Frage hab ich dann doch noch :D

Er selektiert jetzt nur die Dateien mit Unix(LF) die (CRLF) nicht.

Gibt es eine Syntax die sagt das er alle Sortierungen nehmen soll?
Oder zumindest eine wo gesagt wird das auch Dateien mit (CRLF) berücksichtigt werden sollen?

Gruß Alex
emeriks
Lösung emeriks 22.10.2020 um 10:26:56 Uhr
Goto Top
Hier ist Select-String erklärt:
https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell. ...

Da gibt es einen Parameter "-Encoding". Damit experimentieren.
AlexFM
AlexFM 22.10.2020 um 12:05:56 Uhr
Goto Top
bekomme es nicht gebacken face-sad...

Glaube die Dateien im Zielordner alle in Unix LF zu konvertieren wäre geschickter...

Hätte da jemand eine Syntax für ?
emeriks
emeriks 22.10.2020 um 12:20:09 Uhr
Goto Top
Zitat von @AlexFM:
bekomme es nicht gebacken face-sad...
Was nicht?
AlexFM
AlexFM 22.10.2020 um 12:57:24 Uhr
Goto Top
die konvertierung
AlexFM
AlexFM 22.10.2020 um 13:18:10 Uhr
Goto Top
Hat hiermit geklappt:

Get-ChildItem C:\PFAD\Fehlerhafte_Meldungen\* | ForEach-Object { (Get-Content $_) | Out-File -Encoding UTF8 $_ }

Vielen Dank für die Unterstützung face-smile