mpfg
Goto Top

Batch löschen mit ausnahme

Hallo,

bin gerade am verzweifeln.
Ich versuche gerade in ein Ordner alle Dateien zu löschen, die nicht *mix* enthalten.
Die Unterordner sollten auch durchgearbeitet werden.
Sprich, alle *mix* Dateien sollen erhalten bleiben.

MFg

Content-Key: 1097815959

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

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

Mitglied: 148656
148656 Jul 28, 2021 at 17:52:23 (UTC)
Goto Top
Moin,

Dann zeig mal, was du schon hast. Dann könnte man auch sagen, wo es klemmt.

Gruß
C.C.
Member: SeaStorm
SeaStorm Jul 28, 2021 at 18:09:44 (UTC)
Goto Top
hi

gci -File -Path $folder -Exclude "*mix*" -Recurse |del -Force
Member: MPFG
MPFG Jul 28, 2021 at 18:25:48 (UTC)
Goto Top
for /f "delims=" %i in ('dir /b /a-d "C:\Files\wav\"^|findstr /v /b "*mix*"') do echo del "C:\Files\wav\%i"
Member: MPFG
MPFG Jul 28, 2021 at 18:41:31 (UTC)
Goto Top
$pfad = "C:\Files\wav\"
$endung = "*.*"
$muster = "mix"

$dateien = Get-ChildItem $pfad -Recurse -Include $endung
foreach ($datei in $dateien) {
If ($datei.basename -NotMatch $muster)
{
Remove-Item $datei -Recurse -Force
}
}

Funktioniert. Wie kann man noch leere Ordner löschen ?
Member: erikro
erikro Jul 29, 2021 at 09:12:37 (UTC)
Goto Top
Moin,

warum so kompliziert?

remove-item -include * -exclude *mix* -recurse
oder
get-childitem -exclude *mix* -recurse | remove-item

hth

Erik
Member: TK1987
TK1987 Jul 29, 2021 updated at 10:58:46 (UTC)
Goto Top
Moin,

Zitat von @MPFG:
Wie kann man noch leere Ordner löschen ?
Get-ChildItem $Pfad -recurse -dir | Where-Object {!(Get-ChildItem $_.Fullname)} | Remove-Item

Gruß Thomas
Member: MPFG
MPFG Jul 29, 2021 at 14:47:08 (UTC)
Goto Top
Hallo,

leider ist Powershell ein böhmisches Dorf.
Wie müsste das Script mit leeren Ordner löschen aussehen ?
Hab das jetzt schon überall hingepackt.
Leider ohne Erfolg
Member: TK1987
TK1987 Jul 30, 2021 updated at 07:18:00 (UTC)
Goto Top
Zitat von @MPFG:
Wie müsste das Script mit leeren Ordner löschen aussehen ?
# Quellpfad
$Pfad = "C:\Files\wav"  

# Alle Dateien löschen, die nicht "mix" enthalten. 
Remove-Item -Path $Pfad -Include "*.*" -Exclude "*mix*" -recurse  

# Alle leeren Ordner löschen
Get-ChildItem $Pfad -recurse -dir | Where-Object {!(Get-ChildItem $_.Fullname)} | Remove-Item
Mitglied: 149062
149062 Aug 05, 2021 updated at 13:09:08 (UTC)
Goto Top
Zitat von @TK1987:
  1. Alle leeren Ordner löschen
Get-ChildItem $Pfad -recurse -dir | Where-Object {!(Get-ChildItem $_.Fullname)} | Remove-Item
Da bleiben aber dann im Fall der Fälle wieder leere Ordner übrig wenn in einem Ordner nur Unterordner drin sind die selbst leer sind und die Oberordner als erstes überprüft werden, nach den Löschen der Unterordner wird ja der Parent-Ordner nicht erneut geprüft, der ist dann aber auch leer face-wink. Deswegen der Länge nach absteigend sortieren dann passiert das nicht.
Get-ChildItem $Pfad -recurse -dir | sort {$_.FullName.length} -Descending | Where-Object {!(Get-ChildItem $_.Fullname)} | Remove-Item
Member: MPFG
MPFG Aug 15, 2021 at 14:55:09 (UTC)
Goto Top
Hallo,

ich finde zwar die Lösung mit Poweshell super, leider bin ich aber gezwungen wieder auf Batch auszuweichen.

Ich möchte alle Dateien löschen, die nicht mix enthalten.

Hier mein Ansatz:

for /f "delims=" %%i in ('dir /b /a-d "Pfad"^|findstr /v /i "*mix*.*"') do del "Pfad%%i"  

"%%i" kann syntaktisch an dieser Stelle nicht verarbeitet werden.

MfG
Mitglied: 149062
149062 Aug 15, 2021 updated at 18:32:20 (UTC)
Goto Top
Zitat von @MPFG:

Hallo,

ich finde zwar die Lösung mit Poweshell super, leider bin ich aber gezwungen wieder auf Batch auszuweichen.

Ich möchte alle Dateien löschen, die nicht mix enthalten.

Hier mein Ansatz:

for /f "delims=" %%i in ('dir /b /a-d "Pfad"^|findstr /v /i "*mix*.*"') do del "Pfad%%i"  

"%%i" kann syntaktisch an dieser Stelle nicht verarbeitet werden.

MfG

Bei Verwendung von doppelten Prozentzeichen muss das ganze in einer Batchdatei stehen, wenn man das ganze auf einer Konsole direkt testen will dürfen es nur einfach Prozentzeichen sein.

Konsole
for /f "delims=" %i in ('dir /b /a-d "d:\ordner" ^|findstr /vic:"mix"') do del "d:\ordner\%~i"  
In ner Batch
for /f "delims=" %%i in ('dir /b /a-d "d:\ordner" ^|findstr /vic:"mix"') do del "d:\ordner\%%~i"