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

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

Ausgedruckt am: 25.11.2024 um 23:11 Uhr

148656
148656 28.07.2021 um 19:52:23 Uhr
Goto Top
Moin,

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

Gruß
C.C.
SeaStorm
SeaStorm 28.07.2021 um 20:09:44 Uhr
Goto Top
hi

gci -File -Path $folder -Exclude "*mix*" -Recurse |del -Force
MPFG
MPFG 28.07.2021 um 20:25:48 Uhr
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"
MPFG
MPFG 28.07.2021 um 20:41:31 Uhr
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 ?
erikro
erikro 29.07.2021 um 11:12:37 Uhr
Goto Top
Moin,

warum so kompliziert?

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

hth

Erik
TK1987
TK1987 29.07.2021 aktualisiert um 12:58:46 Uhr
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
MPFG
MPFG 29.07.2021 um 16:47:08 Uhr
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
TK1987
TK1987 30.07.2021 aktualisiert um 09:18:00 Uhr
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
149062
149062 05.08.2021 aktualisiert um 15:09:08 Uhr
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
MPFG
MPFG 15.08.2021 um 16:55:09 Uhr
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
149062
149062 15.08.2021 aktualisiert um 20:32:20 Uhr
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"