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-ID: 621173

Url: https://administrator.de/forum/powershell-loesche-datei-wenn-string-in-filename-enthalten-621173.html

Ausgedruckt am: 22.12.2024 um 20:12 Uhr

emeriks
emeriks 11.11.2020 aktualisiert um 14:53:28 Uhr
Goto Top
Hi,
$Strings = @("hallo","welt")  
$t1 = "hallo"  
$Strings.Contains($t1)
liefert $true

E.

Edit: Vergiss es. Du brauchst es ja umgekehrt. face-wink
146189
146189 11.11.2020 aktualisiert um 15:02:32 Uhr
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.
Lupora
Lupora 11.11.2020 um 15:33:24 Uhr
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?
146189
146189 11.11.2020, aktualisiert am 12.11.2020 um 06:42:16 Uhr
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