Vill du vara del av diskussionerna i forumet, ställa frågor eller hjälpa andra? Registrera dig här!

Ta bort alla "tomma" mappar

Trädvy Permalänk
Medlem
Registrerad
Okt 2005

Ta bort alla "tomma" mappar

Hej,

Söker efter ett sätt att på min server som kör Windows 10 att via Schemaläggaren eller liknande köra ett script eller program (om det finns vad jag söker) som söker igenom en specifik mapp efter tomma mappar och tar bort dem. Det ända kruxet är att jag vill att det ska ta bort de "tomma" mapparna även om det finns en undermapp med filer i mappen. Jag har själv hittat ett par lösningar med det verkar endast fungerar med tomma undermappar så nu vänder jag mig till er i hopp om att finna en lösning på mitt problem.

CPU: i7-8700k Moderkort: Asus ROG STRIX Z370-I RAM: 16Gb Corsair Vengeance GPU: EVGA 1080 SC SSD: Samsung 960 EVO 250Gb PSU: Corsair SF 600W Kylning: Cryorig C7 Chassi: Kolink Rocket Skärm: Asus ROG Swift 27"

Trädvy Permalänk
Medlem
Registrerad
Mar 2015
Skrivet av Trött:

Hej,

Söker efter ett sätt att på min server som kör Windows 10 att via Schemaläggaren eller liknande köra ett script eller program (om det finns vad jag söker) som söker igenom en specifik mapp efter tomma mappar och tar bort dem. Det ända kruxet är att jag vill att det ska ta bort de "tomma" mapparna även om det finns en undermapp med filer i mappen. Jag har själv hittat ett par lösningar med det verkar endast fungerar med tomma undermappar så nu vänder jag mig till er i hopp om att finna en lösning på mitt problem.

Powershell skall nog klara vad du vill göra, inte mitt starkaste område. Om jag förstår det rätt vill du radera alla mappar och dess innehåll i nivå 1 om de inte innehåller filer?

Trädvy Permalänk
Medlem
Registrerad
Okt 2005

@Mordekai:
Ja precis så menar jag. Tror också att det går att lösa via PowerShell men är inte heller så haj på det.

CPU: i7-8700k Moderkort: Asus ROG STRIX Z370-I RAM: 16Gb Corsair Vengeance GPU: EVGA 1080 SC SSD: Samsung 960 EVO 250Gb PSU: Corsair SF 600W Kylning: Cryorig C7 Chassi: Kolink Rocket Skärm: Asus ROG Swift 27"

Trädvy Permalänk
Medlem
Registrerad
Okt 2013

@Trött: Tänker mig att mappen är ju inte "tom" om den har undermappar som innehåller filer. Bryr du dig endast om att Parent Directory är "tom" på filer och att alla Children Directories ska raderas utan att kolla deras innehåll?

Trädvy Permalänk
Medlem
Registrerad
Okt 2005

@lejonkung: Ja precis

CPU: i7-8700k Moderkort: Asus ROG STRIX Z370-I RAM: 16Gb Corsair Vengeance GPU: EVGA 1080 SC SSD: Samsung 960 EVO 250Gb PSU: Corsair SF 600W Kylning: Cryorig C7 Chassi: Kolink Rocket Skärm: Asus ROG Swift 27"

Trädvy Permalänk
Medlem
Registrerad
Okt 2013

@Trött:
Detta skript tar in en sökväg till en mapp som argument. Den kommer kolla om mappen innehåller filer. Är mappen tom på filer (den får innehålla andra mappar) så kommer den radera ALLT in hela mappen. Den kommer radera huvudmappen i sig också men det går ju att ta bort om det behövs.

Du kan ju testa och se om den funkar som du vill.

$filesInDir = Get-ChildItem -Path $args[0] -Name -File if ($filesInDir.length -eq 0) { Remove-Item -Path $args[0] -Recurse -Force }

Spara koden som en *.ps1 fil så kan du köra det i PowerShell

Trädvy Permalänk
Medlem
Registrerad
Aug 2016

Har man någon form av bash-stöd, find mm typisk unix-tools eller dess ekvivalent i windows (cygwin eller gitshell)

så gör:

"find -depth -type d -print0 | xargs -0 -r -I {} rmdir -v {}"

rätt bra jobb på rätt sätt - dvs går ända ut i löven först och raderar innan det klättrar sig närmare stammen för att ta bort mapparna som tidigare hade de tomma mapparna. - annars så hyvlas bara de yttersta tomma mapparna längst ut på grenarna och man får köra det flera gånger

'rmdir' tar inte bort mappar som innehåller filer och/eller mappar utan de måste vara just helt tomma.

med andra ord så slaktar man inte några filer av misstag med 'rmdir'

'xargs' används för att portionera ut listan med mappar (med sökvägar) som skall raderas till lagom portioner som kan hanteras av 'rmdir' så att man inte kör slut på kommandoradsbuffrar i shellet om det är stora filträd som skall rensas.

'--print0' och '-0' är för att klara alla tecken som annars kan tolkas som orddelare som tex. mellanslag i filnamn.

Trädvy Permalänk
Medlem
Registrerad
Okt 2005

@lejonkung:

Testade precis genom att lägga upp en test struktur likt det jag vill rensa ur men ditt script tar tyvärr bort rubb och stubb.

CPU: i7-8700k Moderkort: Asus ROG STRIX Z370-I RAM: 16Gb Corsair Vengeance GPU: EVGA 1080 SC SSD: Samsung 960 EVO 250Gb PSU: Corsair SF 600W Kylning: Cryorig C7 Chassi: Kolink Rocket Skärm: Asus ROG Swift 27"

Trädvy Permalänk
Medlem
Registrerad
Okt 2013

@Trött: Okej, då missförstod jag nog hur du menade att din struktur såg ut.
För mig så använder jag scriptet på så sett att jag ger den en sökväg till en mapp, är första nivån i mappen tom på filer så raderar den hela mappen.

Skulle nog behöva få exempel på struktur och sökvägar där scriptet ska börja exekvera och vad resultatet skulle bli av körningen.
T.ex. Vilka mappar som ska raderas för en given sökväg.

Håller inte direkt på med PowerShell eller så men är ju alltid kul att hjälpa till.

Trädvy Permalänk
Rekordmedlem
Plats
Salstad
Registrerad
Feb 2009

Windirstat visar hur många filer det finns i en mapp och det går att markera de med 0 filer och välja att radera dem.
Vet inte hur lätt det är att scripta i det men det har en funktion "User Defined Cleanups"

Ryzen 5 2400G, Asus ROG STRIX B350-F Gaming, 500GB Samsung 970EVO NVMe M.2 och en väldig massa masslagring. Seasonic Focus+ Gold 650W, Antec P 180 med Schyte o Sharkoon fläktar via en t-balancer, Tittar på en Acer ET430Kbmiippx 43" 4K
Främre ljudkanalerna återges via Behringer DCX2496, högtalare Truth B3031A, Truth B2092A Har också Oscilloskop, mätmikrofon och en Colorimeter.