lupora
Goto Top

Powershell - Lösche Datei wenn String in Filename enthalten

Hallo zusammen,

ich stehe auf dem Schlauch. Ich will ein Skript das eine Ordnerstruktur rekursiv durchsucht und wann immer es ein String in einem Dateinamen findet, soll es die ganze Datei löschen.

Bisher mein Skript:
$Zielordner = "C:\Users\"  

$string = "Copy"  
get-childitem $Zielordner -Recurse | where-object {$_.Name -like "*$string*"} | foreach ($_) {remove-item $_.fullname}  


Frage: Es soll mehrere Strings prüfen. Das Skript durchsucht 100000 Dateien. Ich will nicht das es für jeden String einmal alles durchgeht.
Kann mir jemand helfen? Was müsste ins Skript damit er mehrere Strings prüft? Sozsuagen $string1, $string2 etc. ?

Viele Grüße!

Content-Key: 621173

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

Printed on: April 24, 2024 at 22:04 o'clock

Member: emeriks
emeriks Nov 11, 2020 updated at 13:53:28 (UTC)
Goto Top
Hi,
$Strings = @("hallo","welt")  
$t1 = "hallo"  
$Strings.Contains($t1)
liefert $true

E.

Edit: Vergiss es. Du brauchst es ja umgekehrt. face-wink
Mitglied: 146189
146189 Nov 11, 2020 updated at 14:02:32 (UTC)
Goto Top
Frage: Es soll mehrere Strings prüfen. Das Skript durchsucht 100000 Dateien. Ich will nicht das es für jeden String einmal alles durchgeht.
Kommt hier gefühlt 3 mal am Tag die Frage ... z.B. hier Powershell select-string -pattern
$suchstrings = "Suchich1","Suchich2"  
ls 'D:\IrgendeinOrdner' -File -Recurse -Force -EA 0 | ?{Select-String $_.FullName -Pattern $suchstrings -SimpleMatch -Quiet} | del -Force -Verbose  
"C:\Users\"
Na dann hoff ich mal das dein Skript mit genügend Rechten ausgestattet unterwegs ist face-wink.
Member: Lupora
Lupora Nov 11, 2020 at 14:33:24 (UTC)
Goto Top
Leider klappt das Skript nicht :/

Matched er den Suchstring hart? Er soll einfach nur schauen ob der String im Filenamen drin vorkommt.
Habe es gerade probiert mit einem JPG was einen langen Dateinamen trägt.
In der Mitte des Dateinames steht "Spinangle34".

Ich hätte vermutet wenn ich den Suchstring "Spinangle34" einsetze wird jede Datei gelöscht die das irgendwo enthält?
Mitglied: 146189
146189 Nov 11, 2020, updated at Nov 12, 2020 at 05:42:16 (UTC)
Goto Top
Zitat von @Lupora:
Er soll einfach nur schauen ob der String im Filenamen drin vorkommt.
Uups, das mein Skript sucht nicht in den Dateinamen sondern im Inhalt der Dateien face-smile, da hatte ich wohl das kleine Detail überlesen, sorry.

Willst du nur die Dateinamen durchsuchen dann hast du mehrere Möglichkeiten, hier mal zwei mögliche
$suchstrings = "Suchich1","Suchich2"  
$filter = $suchstrings | %{"*$_*"}  
ls 'D:\IrgendeinOrdner' -File -Filter $filter -Recurse -Force -EA 0 | del -Force -Verbose  
Oder auch
$suchstrings = "Suchich1","Suchich2"  
$pattern = ($suchstrings | %{[regex]::Escape($_)}) -join "|"  
ls 'D:\IrgendeinOrdner' -File -Recurse -Force -EA 0 | ?{$_.Name -match $pattern} | del -Force -Verbose