Ta bort alla "tomma" mappar

Permalänk
Medlem

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.

Visa signatur

CPU: i9-10900k Moderkort: Asus ROG STRIX Z470-H RAM: 32Gb Corsair Vengeance GPU: Gigabyte 3070ti SSD: Samsung 970 EVO 1Tb PSU: Corsair SF 600W Kylning: Noctua D15 Chassi: Fractal Design Meshify Skärm: LG C3 42" & Asus ROG Swift 27"

Permalänk
Medlem
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?

Permalänk
Medlem

@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.

Visa signatur

CPU: i9-10900k Moderkort: Asus ROG STRIX Z470-H RAM: 32Gb Corsair Vengeance GPU: Gigabyte 3070ti SSD: Samsung 970 EVO 1Tb PSU: Corsair SF 600W Kylning: Noctua D15 Chassi: Fractal Design Meshify Skärm: LG C3 42" & Asus ROG Swift 27"

Permalänk
Medlem

@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?

Permalänk
Medlem

@lejonkung: Ja precis

Visa signatur

CPU: i9-10900k Moderkort: Asus ROG STRIX Z470-H RAM: 32Gb Corsair Vengeance GPU: Gigabyte 3070ti SSD: Samsung 970 EVO 1Tb PSU: Corsair SF 600W Kylning: Noctua D15 Chassi: Fractal Design Meshify Skärm: LG C3 42" & Asus ROG Swift 27"

Permalänk
Medlem

@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

Permalänk
Medlem

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.

Permalänk
Medlem

@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.

Visa signatur

CPU: i9-10900k Moderkort: Asus ROG STRIX Z470-H RAM: 32Gb Corsair Vengeance GPU: Gigabyte 3070ti SSD: Samsung 970 EVO 1Tb PSU: Corsair SF 600W Kylning: Noctua D15 Chassi: Fractal Design Meshify Skärm: LG C3 42" & Asus ROG Swift 27"

Permalänk
Medlem

@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.

Permalänk
Rekordmedlem

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"

Visa signatur

R5 5600G, Asus ROG STRIX X470-F Gaming, WD SN850X 2TB, Seasonic Focus+ Gold 650W, Aerocool Graphite v3, Tittar på en Acer ET430Kbmiippx 43" 4K. Lyssnar på Behringer DCX2496, Truth B3031A, Truth B2092A. Har också oscilloskop, mätmikrofon och colorimeter.