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

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

Printed on: April 19, 2024 at 18:04 o'clock

Member: emeriks
emeriks Oct 21, 2020 at 12:17:43 (UTC)
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.
Member: AlexFM
AlexFM Oct 21, 2020 at 12:38:08 (UTC)
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
Member: emeriks
emeriks Oct 21, 2020 at 12:41:38 (UTC)
Goto Top
Member: AlexFM
AlexFM Oct 21, 2020 at 13:00:04 (UTC)
Goto Top
Danke für den Link, konnte nur leider kein Ergenis mit den Vorschlägen der Seite erzielen...
Member: emeriks
emeriks Oct 21, 2020 at 13:39:23 (UTC)
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.
Member: emeriks
emeriks Oct 21, 2020 at 13:41:21 (UTC)
Goto Top
Sind das Unicode- oder ASCII-Dateien?
Member: AlexFM
AlexFM Oct 21, 2020 at 13:50:34 (UTC)
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
Member: AlexFM
AlexFM Oct 21, 2020 at 14:04:07 (UTC)
Goto Top
Unicode
Member: Daemmerung
Daemmerung Oct 21, 2020 updated at 15:54:03 (UTC)
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
Member: AlexFM
AlexFM Oct 22, 2020 updated at 06:57:11 (UTC)
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..
Member: emeriks
Solution emeriks Oct 22, 2020 updated at 07:07:39 (UTC)
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.
Member: AlexFM
AlexFM Oct 22, 2020 at 07:07:30 (UTC)
Goto Top
das bringt auch keine Veränderung face-sad
Member: AlexFM
AlexFM Oct 22, 2020 at 07:09:20 (UTC)
Goto Top
Bester face-smile

Vielen Dank für deine (eure) Hilfe.

Einen schönen Tag euch face-smile
Member: emeriks
emeriks Oct 22, 2020 at 07:09:44 (UTC)
Goto Top
Zitat von @AlexFM:
das bringt auch keine Veränderung face-sad
???
Member: AlexFM
AlexFM Oct 22, 2020 at 07:17:29 (UTC)
Goto Top
doch doch, hat gepasst. Vielen Danke face-smile
Member: AlexFM
AlexFM Oct 22, 2020 at 08:06:39 (UTC)
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
Member: emeriks
Solution emeriks Oct 22, 2020 at 08:26:56 (UTC)
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.
Member: AlexFM
AlexFM Oct 22, 2020 at 10:05:56 (UTC)
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 ?
Member: emeriks
emeriks Oct 22, 2020 at 10:20:09 (UTC)
Goto Top
Zitat von @AlexFM:
bekomme es nicht gebacken face-sad...
Was nicht?
Member: AlexFM
AlexFM Oct 22, 2020 at 10:57:24 (UTC)
Goto Top
die konvertierung
Member: AlexFM
AlexFM Oct 22, 2020 at 11:18:10 (UTC)
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